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

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,并且输入数据Sep 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排序,并采用LastID小于date参数但我坚持语法的BasketID。如何解决此查询?

最佳答案

(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();

10-02 02:47