C# 使用LINQ在SortedDictionary中搜索项目

C# 使用LINQ在SortedDictionary中搜索项目,c#,linq,sorteddictionary,C#,Linq,Sorteddictionary,我有一本分类词典,类型如下: SortedDictionary<PriorityType, List<T>> dictionary; 分类词典; 其中PriorityType是枚举类,列表包含各种字符串值 我想使用LINQ搜索列表中长度为偶数的字符串项。 例如: IEnumerable filteredList=新列表(); //在列表中存储字符串长度为偶数的项 filteredList=//LINQ代码; 我已经尝试了很多LINQ的实现,但是,使用LINQ遍历So

我有一本分类词典,类型如下:

SortedDictionary<PriorityType, List<T>> dictionary;
分类词典;
其中PriorityType是枚举类,列表包含各种字符串值

我想使用LINQ搜索列表中长度为偶数的字符串项。 例如:

IEnumerable filteredList=新列表();
//在列表中存储字符串长度为偶数的项
filteredList=//LINQ代码;
我已经尝试了很多LINQ的实现,但是,使用LINQ遍历SortedDictionary中的列表似乎很困难(考虑到我对LINQ比较陌生)


请帮我输入LINQ代码。谢谢

如果我理解正确,那么您需要的项目列表中的项目数为偶数:

filteredList = dictionary.Select(kvp => kvp.Value)
                         .Where(l => l != null && l.Count % 2 == 0)
                         .SelectMany(l => l)
                         .ToList();
更新:如果要选择长度为偶数的字符串,则应使用
List
而不是
T
的通用列表:

SortedDictionary<PriorityType, List<string>> dictionary;
filteredList = dictionary.SelectMany(kvp => kvp.Value)
                         .Where(s => s.ToString().Length % 2 == 0)
                         .ToList();
分类词典;
filteredList=dictionary.SelectMany(kvp=>kvp.Value)
。其中(s=>s.ToString()。长度%2==0)
.ToList();

@Sergey提供的解决方案是正确的,符合我的要求

我还使用
select
语句找到了另一个简单的解决方案

filteredList = from list in dictionary.Values from item in list where item.ToString().Length % 2 == 0 select item;

希望这有帮助

什么是“具有偶数长度的键”?我希望列表中的项具有偶数长度。编辑了问题。仅当列表中的字符串元素数为偶数时,才会显示列表中的字符串项。但是,我想要所有长度为偶数的字符串项。@nashcheez对不起,你说的是什么字符串?您有一个通用的
列表
,它可以是整数列表或任何类是的,这是一个通用列表!我从Main()向它传递字符串,也就是说,当SortedDictionary实现时,它就变成了List。@nashcheez您有通用字典。所以查询也应该是泛型的。它应该适用于任何T型。如果您想使用Strings,请使用
SortedDictionary
。我承认,我的要求很奇怪。我之前实现了一个优先级队列!然后我不得不修改它来实现
IEnumerable
接口,用各种扩展方法来扩展T类型的功能,比如Where(…)。无论如何,非常感谢!
filteredList = from list in dictionary.Values from item in list where item.ToString().Length % 2 == 0 select item;