如何在LINQ查询中进行分组和排序

时间:2010-05-05 15:50:35

标签: c# linq entity-framework

我想分组&在查询构建器表达式中排序。以下查询让我接近我想要的但订单依据似乎不起作用。

我拥有的是一个具有唯一ID的对象,但有些会有一个共同的versionId。我想获得相同versionId的最后编辑项目。因此,每个版本ID只有一个项目,我希望它是最后编辑的项目。

IQueryable<Item> result = DataContext.Items.Where(x => (x.ItemName.Contains(searchKeyword) ||
                                  x.ItemDescription.Contains(searchKeyword))
                                  .GroupBy(y => y.VersionId)
                                  .Select(z => z.OrderByDescending(item => item.LastModifiedDateTime).FirstOrDefault());

编辑:我并不关心结果集的顺序,我真的只关心分组中的哪个项目被返回。我想确保返回versionId组中最后编辑的项目。

1 个答案:

答案 0 :(得分:2)

您的z参数包含各个组对象。

通过调用OrderBy内的Select,您可以在每个组中订购商品,但不会订购商品组。

您还需要在OrderBy之后拨打Select,如下所示:

.Select(z.OrderByDescending(item => item.LastModifiedDateTime).FirstOrDefault())
.Where(item => item != null)
.OrderByDescending(item => item.LastModifiedTime)