我有一个看起来像这样的字段
public Dictionary<ClassA, List<ClassB>> MyDict;
假设:
public class ClassA
{
public string Name;
public int Id;
}
public class ClassB
{
public string Tag;
public string Text;
}
我正在尝试定义IEnumerable<KeyValuePair<ClassA,IEnumerable<ClassB>>
类型的查询,在其中我对ClassB.Tag
的值定义条件。我尝试过类似的事情:
IEnumerable<KeyValuePair<ClassA,IEnumerable<ClassB>> q =
MyDict.Where(pair => pair.Value.Any(b => b.Tag == "a tag"));
但是显然以上不是我所需要的,因为如果任何项与该条件匹配,它将返回整个List<ClassB>
,而我想要返回的是IEnumrable
或List
个符合条件的项目。
答案 0 :(得分:3)
您需要从对ToDictionary的调用中构造IEnumerable,在该投影中,使用投影仅从列表中获取匹配的BClass,而仅从该集合中的结果实际匹配BClass列表中的值。
IEnumerable<KeyValuePair<ClassA,List<ClassB>>> q = MyDict.ToDictionary(
k => k.Key,
k => k.Value.Where(b => b.Tag == "10").ToList()
).Where(kv => kv.Value.Any());