我有一个如下所示的表:
| FruitID | BasketID | FruitKind | HarvestTime |
| 23 | 2 | 6 | 1/13/2013 |
| 24 | 2 | 3 | 1/19/2013 |
| 25 | 5 | 4 | 1/21/2013 |
| 26 | 5 | 3 | 1/31/2013 |
| 27 | 5 | 6 | 2/3/2013 |
我想查询某个BasketID
列表中的所有水果,按BasketID
对结果进行分组,在每组中,查看最后一个HarvestTime
,并返回包含FruitKind
为3或4的水果的所有BasketIDs
的列表(FruitKind的值可以在1到8之间)。例如,如果我们传入BasketID
2和5,BasketID
2会返回,因为它最新的FruitID
24的FruitKind
为3,而BasketID
5的FruitID
27为6。
这就是我陷入困境的地方:
var TheQuery = (from a in MyDC.TableFruits
where TheListOfBasketIDs.Contains(a.BasketID)
group a by a.BasketID into g
where .... "latest FruitID has FruitKind == to 3 || 4"
select g.Key).ToList();
我需要在每组中订购HarvestTime,这样我就可以测试最新水果的FruitKind。谢谢你的建议。
如果我理解正确,那么
var TheQuery = (from a in MyDC.TableFruits
where TheListOfBasketIDs.Contains(a.BasketID)
group a by a.BasketID into g
let lastFruitKind = g.OrderByDescending(x => x.HarvestTime)
.First().FruitKind
where lastFruitKind == 3 ||
lastFruitKind == 4
select g.Key).ToList();