在groupby之后对分组元素进行linq排序

本文关键字:linq 排序 元素 groupby 之后 | 更新日期: 2023-09-27 17:57:47

我有一个如下所示的表:

| 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。谢谢你的建议。

在groupby之后对分组元素进行linq排序

如果我理解正确,那么

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