C# Linq到Sql筛选最后一个元素的日期

C# Linq到Sql筛选最后一个元素的日期,c#,linq-to-sql,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 我想传入一个篮子ID列表,只返回所有收获日期都小于某个日期的篮子ID。例如,如果我传入430和435,对于数据Sep 29,那么查询应该只返回430,因

我有一张这样的桌子:

FruitID | BasketID | HarvestDate
  10    |    435   |   10/1/2014
  11    |    430   |   8/4/2014
  12    |    435   |   3/1/2014
  13    |    430   |   5/2/2014
我想传入一个篮子ID列表,只返回所有收获日期都小于某个日期的篮子ID。例如,如果我传入430和435,对于数据Sep 29,那么查询应该只返回430,因为435的水果10的收获日期超过了参数

这就是我所拥有的:

var Output = (from f in MyDC.Fruits
              where TheBasketIDs.Contains(f.BasketID) &&
                 f.HarvestDate <= TheDate
              select f.BasketID).ToList();
我的直觉告诉我,我应该按与传入ID匹配的BasketId分组,然后按HarvestDate排序,并在最后一个日期小于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();
选择所有收获日期大于收获日期的,然后进行查询,第一次查询中返回的将被删除

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

选择所有收获日期大于收获日期的,然后进行查询,第一次查询中返回的将被删除

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


是什么让您认为需要修复该查询?你试过你已经得到的查询了吗?是的,这是我得到的查询,问题是当我输入日期9/29时,它同时返回430和435。它不应该返回435,因为该篮子的收获日期也为10/1。查询的工作原理是,它没有bug,但没有返回预期的值。您为什么认为需要修复查询?你试过你已经得到的查询了吗?是的,这是我得到的查询,问题是当我输入日期9/29时,它同时返回430和435。它不应该返回435,因为该篮子的收获日期也为10/1。这个查询的工作原理是它没有bug,但没有返回预期的值。。。tnx:难道你不需要提供一些定制的比较工具吗?我认为对于整数来说,它是开箱即用的。但即便如此,原则和简单是我的指南。这里:好的,我没有注意到你只选择了Id。我在这里脸红。。。tnx:难道你不需要提供一些定制的比较工具吗?我认为对于整数来说,它是开箱即用的。但即便如此,原则和简单是我的指南。这里:好的,我没有注意到您只选择了Id。查询应该以.ToList结束,因为我们返回了一个BasketID列表。我仍在使用groupby和where子句进行处理。我用select g尝试了select。Selectx=>x.BasketID.ToList;但它不起作用yetOk,看到编辑:删除选择中的排序过滤器,然后编译:选择g.First.LeadID,然后我用……ToList包装整个查询,就像编辑中一样。我们会在几分钟内知道。NP,是的,如果您只需要Id,则排序是多余的。将对其进行编辑。查询应以.ToList结束,因为我们返回的是BasketID列表。我仍在使用groupby和where子句进行处理。我用select g尝试了select。Selectx=>x.BasketID.ToList;但它不起作用yetOk,看到编辑:删除选择中的排序过滤器,然后编译:选择g.First.LeadID,然后我用……ToList包装整个查询,就像编辑中一样。我们将在几分钟内知道。NP,是的,如果您只需要Id,那么订购是多余的。我们将编辑它。