我有一个看起来像这样的表:
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,但我仍然坚持语法。如何解决此问题?
感谢。
答案 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();