【问题标题】:Select nested property values in LINQ在 LINQ 中选择嵌套属性值
【发布时间】:2015-08-05 22:28:40
【问题描述】:

我对 Linq 还很陌生,我开始尝试在不使用 foreach 循环的情况下过滤列表和 IEnumerable 内容。在这种情况下,如果嵌套属性符合给定条件,我想检索它。

这是我目前所拥有的:

IEnumerable<GroupTourData> test = 
    web_service_item.TourInstances
    .Where(x => x.Availability.Where(a => a.Price > 0 && a.Grade == string.Empty)
    .Count() > 0);

我想在这里实现的是匹配条件中所有价格的 IEnumerable 列表。我虽然可以通过将 .SelectMany(a.Price) 添加到此语句的末尾来获得,但这似乎在 Visual Studio 中出错。

任何帮助或指点将不胜感激。

【问题讨论】:

  • 哪种类型的错误?你能发布错误吗?
  • 你的代码中应该有.Include("Availability")吗?
  • 您只想要价格?那么你只是把你的SelectMany 放在了错误的位置:web_service_item.TourInstances.SelectMany(ti =&gt; ti.Availability).Where(a =&gt; a.Price &gt; 0 &amp;&amp; a.Grade == string.Empty).Select(a =&gt; a.Price);
  • 不是第二个Where,而是使用Any返回布尔值。
  • .Count() 采用 lambda 表达式,因此您可以使用 .Where(x =&gt; x.Availability.Count(a =&gt; a.Price &gt; 0 &amp;&amp; a.Grade == string.Empty) &gt; 0)

标签: c# .net linq


【解决方案1】:

好的,这似乎解决了问题:

如果您只想要prices?那么你只是把你的SelectMany 放在了错误的位置:

web_service_item
    .TourInstances
    .SelectMany(ti => ti.Availability)
    .Where(a => a.Price > 0 && a.Grade == string.Empty)
    .Select(a => a.Price);

【讨论】:

    【解决方案2】:

    取决于您的数据架构和表...您是否尝试过使用 Include 包含您的子实体?

    IEnumerable<GroupTourData> test = web_service_item
        .TourInstances
        .Include("Availability")
        .Where(x => x
            .Availability
            .Any(a => a.Price > 0 && a.Grade == string.Empty)
        );
    

    【讨论】:

    • 你比我快一点 ;) 你的解决方案完全实现了我在对该问题的评论中提出的建议。干杯,Maciej
    • @MaciejLos 在添加我的答案时,我没有看到任何新的 cmets 出现,但你是对的,正如你所建议的那样,我添加了 Any
    猜你喜欢
    • 2021-10-11
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多