Или используйте эту реализацию:
работал следующее, но довольно элегантно. Я хотел бы поработать с ToDictionary, если это возможно. Спасибо за любую помощь, так как я довольно новый.
var excel = new ExcelQueryFactory(@"E:\MAHipotCepaStationProgram.xlsx");
//get list of program names
List<string> testNames = new List<string>();
testNames.AddRange(excel.Worksheet().ToList()
.Where(s => s["Program #"].Value.ToString() == "Program Title")
.Select(s => s[1].Value.ToString()));
//get list of program numbers
List<int> testNumbers = new List<int>();
testNumbers.AddRange(excel.Worksheet().ToList()
.Where(s => s["Program #"].Value.ToString() == "Program #")
.Select(s => Convert.ToInt32(s[1].Value)));
//combine them
Dictionary<int, string> programs = new Dictionary<int, string>();
for (int x = 0; x < testNames.Count-1; x++)
{
if (!programs.ContainsKey(Convert.ToInt32(testNumbers[x])))
{
programs.Add(Convert.ToInt32(testNumbers[x]), testNames[x]);
}
else
{
testNumbers[x].Dump("Duplicate Found");
}
}
programs.Dump("Dict");
Это так близко, как я получил, но не правильно. Ошибка: «Требуется получатель типа IEnumberable string, который не работает со мной:
var excel = new ExcelQueryFactory(@"E:\MAHipotCepaStationProgram.xlsx");
Dictionary<string, string> programsDict = excel.Worksheet().ToDictionary<string, string>(
e => e["Program #"].Value.ToString() == "Program Title")
.Select(s => s[1].Value.ToString()),
f => f.Where(d => d.Value.ToString() == "Program #").ToString());