Linq到Sql对最后一个元素的日期进行筛选

本文关键字:日期 筛选 元素 Sql 最后一个 Linq | 更新日期: 2023-09-27 18:26:56

我有一个如下所示的表:

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

我的直觉告诉我应该按BasketID分组,这些BasketID与传入的ID相匹配,然后按HarvestDate排序,并在最后一个日期小于日期参数但我坚持语法的地方使用BasketID。如何修复此查询?

Linq到Sql对最后一个元素的日期进行筛选

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

相反。

选择所有收获日期大于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();