我有一个看起来像这样的表:
| 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
并返回包含BasketIDs
为3或4的水果的所有FruitKind
的列表(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进行排序,以便我可以测试最新Fruit的FruitKind。谢谢你的建议。
答案 0 :(得分:4)
如果我理解正确,那么
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();