如何使用Linq从字典中的列表中获取多个值



我一直在尝试一点,但似乎遇到错误之后,是否有一种方法可以使用Linq来压缩这使其更有效,特别是字典列表试图检测列表是否包含返回它的intand的部分?

我想可能我只是需要一点帮助,因为我不太擅长linq。如果你觉得还有什么我可以做得更好的,我很乐意听到。这只是我为一个更大的片段隔离的一些测试代码. 提前谢谢。

public enum columns { Parts_Column, Questions_Column, Answers_Column, Reset_Amount };
public static void Main()
{
// Were are not comparing numbers this is just to fill the list out for count
List<string> orderedRects = new List<string>() { "item1","item2","item3","item4","item5","item6","item7","item8","item9","item10" };
Dictionary<columns, List<int>> TheDictionary = new Dictionary<columns, List<int>>();
TheDictionary.Add(columns.Parts_Column, new List<int>() { 1 } );
TheDictionary.Add(columns.Questions_Column, new List<int>() { 2, 4 } );
TheDictionary.Add(columns.Answers_Column, new List<int>() { 3, 5 } );
TheDictionary.Add(columns.Reset_Amount, new List<int>() { 6 } );

int count = 0;
int reset = TheDictionary[columns.Reset_Amount][0];
for(int i = 0; i < orderedRects.Count;i++)
{
if(count == reset)
{
count = 0;
}
// Can we get this to become more compact using linq? or even combine them so each part has multiple int returns
foreach (var pair in TheDictionary)
{
if(pair.Value.Contains(count))
{
int num = pair.Value.Where(o => o == count).FirstOrDefault();
Console.WriteLine(pair.Key + ": " + num);
}
}
count++;
}
Console.WriteLine("Total: " + count);
}

这得到了我正在寻找的感谢回复。

public enum columns { Parts_Column, Questions_Column, Answers_Column, Reset_Amount };
public static void Main()
{
// Were are not comparing numbers this is just to fill the list out
List<string> orderedRects = new List<string>() { "item1","item2","item3","item4","item5","item6" };
Dictionary<columns, List<int>> TheDictionary = new Dictionary<columns, List<int>>();
TheDictionary.Add(columns.Parts_Column, new List<int>() { 1 } );
TheDictionary.Add(columns.Questions_Column, new List<int>() { 2, 4 } );
TheDictionary.Add(columns.Answers_Column, new List<int>() { 3, 5 } );
TheDictionary.Add(columns.Reset_Amount, new List<int>() { 6 } );

int count = 0;
int reset = TheDictionary[columns.Reset_Amount][0];

List<int> PartsColumnResults = new List<int>();
List<int> QuestionsColumnResults = new List<int>();
List<int> AnswersColumnResults = new List<int>();
for(int i = 0; i < orderedRects.Count;i++)
{
if(count == reset)
{
count = 0;
}
foreach (var pair in TheDictionary.Where(x => x.Value.Contains(count))) 
{
// Parts Column
if(pair.Key.Equals(columns.Parts_Column)) { PartsColumnResults = TheDictionary[columns.Parts_Column]; }
// Questions Column
if(pair.Key.Equals(columns.Questions_Column)) { QuestionsColumnResults = TheDictionary[columns.Questions_Column]; }
// Answers Column
if(pair.Key.Equals(columns.Answers_Column)) { AnswersColumnResults = TheDictionary[columns.Answers_Column]; }
}
count++;
}
foreach(var r in QuestionsColumnResults)
{
Console.WriteLine(r);
}
}