Linq-to-Sql过滤最后一个元素的日期

时间:2014-10-16 14:51:36

标签: c# linq-to-sql

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

FruitID | BasketID | HarvestDate
  10    |    435   |   10/1/2014
  11    |    430   |   8/4/2014
  12    |    435   |   3/1/2014
  13    |    430   |   5/2/2014

我想传递一个BasketID列表并仅返回所有HarvestDate小于特定日期的BasketID。例如,如果我传入430和435以及9月29日的数据,则查询应该仅返回430,因为435的Fruit 10具有超过参数的HarvestDate。

这就是我所拥有的:

var Output = (from f in MyDC.Fruits
              where TheBasketIDs.Contains(f.BasketID) &&
                 f.HarvestDate <= TheDate
              select f.BasketID).ToList();

我的直觉告诉我,我应该按照传入的ID匹配的BasketID进行分组,然后按HarvestDate进行排序,并使用最后一个日期小于日期参数的BasketID,但我仍然坚持语法。如何解决此问题?

感谢。

2 个答案:

答案 0 :(得分:4)

(from f in MyDc.Fruits
group f by f.BasketID into g
where TheBasketIDs.Contains(g.Key)
&& g.OrderByDescending(gg=>gg.HarvestDate).First().HarvestDate <= TheDate
select g.First().BasketID).ToList();

答案 1 :(得分:2)

反过来说。

选择收获日大于 HarvestDate 的所有收集日,然后选择要查询的内容以及第一个查询中返回的查询。

var Output1 = (from f in MyDC.Fruits
              where TheBasketIDs.Contains(f.BasketID) &&
                 f.HarvestDate > TheDate
              select f.BasketID).ToList();

var Output2 = (from f in MyDC.Fruits
          where TheBasketIDs.Contains(f.BasketID) &&
             f.HarvestDate <= TheDate
          select f.BasketID).ToList();

var Output = Output2.Except(Output1).ToList();