我有一个看起来像这样的字段:
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>
如果 any 项目符合该条件,而我想要的是返回 IEnumrable
或 List
符合条件的项目。
最佳答案
您需要通过对 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());
关于c# - Linq:从字典中选择 KeyValuePair,其中值是对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012809/