c# - Linq:从字典中选择 KeyValuePair,其中值是对象列表

标签 c# linq

我有一个看起来像这样的字段:

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 项目符合该条件,而我想要的是返回 IEnumrableList符合条件的项目。

最佳答案

dotNetFiddle demo

您需要通过对 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/

相关文章:

c# - 避免 Linq Select 方法中的重复代码

C# Linq to XML,当 child 满足条件时获取 parent

c# - 在调用 StrackExchange.Redis 的 StringSet 方法之前是否需要检查

c# - 解析字符串以生成谓词

c# - 找不到合适的方法来覆盖?

linq - NHibernate 3 使用 SQL Compact 4.0 和 FirstOrDefault() 抛出 NotSupportedException

c# - Linq - OrderBy 使用 lambda 表达式的两列的最小值?

c# - 运行 ProcDump 时出错

c# - Linq 查询具有 where 条件的表中的不同数据

c# - Linq 多对多包括