在LINQ中按顺序对每组的行进行编号
本文关键字:编号 LINQ 顺序 | 更新日期: 2023-09-27 18:05:49
假设您有列AppleType, CreationDate,并希望按CreationDate对每组AppleType进行排序。此外,您还需要创建一个新列,该列显式地根据AppleType对CreationDate进行排序。
因此,结果数据集将有三列,AppleType, CreationDate, orderimported。
是否有LINQ的方法来做到这一点?我实际上要通过编程的数据(但不是通过LINQ),创建一个数组,转换为一列,并添加到数据集?我有一个LINQ方法来做这个。如果可能,请使用LINQ非方法语法
那么这些值实际上是按照正确的顺序出现的吗?如果是这样,这很容易——但是确实需要使用方法语法,因为查询表达式语法不支持相关的重载:
var queryWithIndex = queryWithoutIndex.Select((x, index) => new
{
x.AppleType,
x.CreationDate,
OrderIntroduced = index + 1,
});
(假设您希望OrderIntroduced
从1开始)
我不知道你怎么把它放回DataSet
-但是你真的需要它在DataSet
而不是在强类型序列中吗?
var query = dataSource.GroupBy(x => x.AppleType)
.SelectMany(g => g.OrderBy(x => x.CreationDate)
.Select((x, index ) => new {
x.AppleType,
x.CreationDate,
OrderIntroduced = index + 1 }));
注意:这里的GroupBy
和SelectMany
调用可以放在查询表达式语法中,但我相信在这种情况下它会变得更加混乱。这两种形式都值得使用。
如果你想要一个纯Linq to Entities/SQL解决方案,你可以这样做:
修改以处理重复的creatationdate
var query = from a in context.AppleGroup
orderby a.CreationDate
select new
{
AppleType = a.AppleType,
CreationDate = a.CreationDate,
OrderIntroduced = (from b in context.AppleGroup
where b.CreationDate < a.CreationDate
select b).Count() + 1
};