【问题标题】:selecting a single item from grouped linq query based on a condition根据条件从分组的 linq 查询中选择单个项目
【发布时间】:2014-05-01 00:43:51
【问题描述】:

我正在为分组 linq 查询而苦苦挣扎

我有这个:

DateTime dateFrom = new Date(2014,8,2);
var GroupedPrices = Prices.Where(p => p.ArrivalDateFrom <= dateFrom
                    &&
                    p.ArrivalDateTo > dateFrom)
                    .GroupBy(p => p.ItemID);

我试图获得每个 ID 的单一价格 - 例如。在/来自每个组,基于该价格的最新 ValidFrom 日期。 我已经开始按他们的 ItemID(不是单独的价格记录 ID)对它们进行分组,但我正在努力研究如何根据最新的 ValidFrom 日期仅获取一个。我以为我可以在分组之前订购它们,但不确定分组完成后是否会坚持..即

预计它将使用 Max(x=&gt;x.ValidFrom) 类型的东西或 OrderByDescending(x=&gt;x.ValidFrom).First() 但无法解决

非常感谢任何帮助

谢谢

【问题讨论】:

  • ID 是唯一的吗?如果是,将它们分组对您没有多大好处
  • 他们不是,这是所有商品的价格表,我会调用那个商品 ID 以便更清楚

标签: c# .net linq grouping


【解决方案1】:

我认为你只需要在最后选择你想要的,就像这样:

DateTime dateFrom = new Date(2014,8,2);
var GroupedPrices = Prices
    .Where(p => p.ArrivalDateFrom <= dateFrom && p.ArrivalDateTo > dateFrom)
    .GroupBy(p => p.ItemID)
    .Select(g => new{ ItemId = g.Key, NewestPrice = g.OrderByDescending(p => p.ValidFrom).First() });

【讨论】:

  • 感谢您的回复,但我得到{“方法 'First' 只能用作最终查询操作。请考虑在此实例中使用方法 'FirstOrDefault'。”} - 我只是需要每个组中具有最新 ValidFrom 日期的整个价格对象
  • 通过设置 FirstOrDefault() 确实有效。非常感谢
猜你喜欢
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
相关资源
最近更新 更多