我有以下类用于保存仅用于报告的数据。
public class AdminDetail
{
public int Row { get; set; } // This row needs a unique number
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public string Title { get; set; }
public string Status { get; set; }
public string Type { get; set; }
public string Level { get; set; }
public string Order { get; set; }
}
在_table集合中填充以下选项。
details = from t in _table
select new AdminDetail
{
PartitionKey = t.PartitionKey,
RowKey = t.RowKey,
Title = t.Title,
Status = t.Status,
Type = t.Type,
Level = t.Level,
Order = t.Order
};
detailsList = details.OrderBy(item => item.Order).ThenBy(item => item.Title).ToList();
在使用最后一个语句对行进行排序之后,我想将一个值放入RowID中 对应于行。所以,如果我有三个实例返回,我希望他们有RowID 1,2和3。
有没有办法可以用LINQ做到这一点?
答案 0 :(得分:2)
使用带有索引的Select
方法,例如:
table.Select((t, index) => new AdminDetail {
Row = index + 1,
PartitionKey = t.PartitionKey,
RowKey = t.RowKey,
Title = t.Title,
Status = t.Status,
Type = t.Type,
Level = t.Level,
Order = t.Order });
答案 1 :(得分:2)
您可以将select
方法与索引一起使用。
detailsList = details.OrderBy(item => item.Order).ThenBy(item => item.Title)
.Select((t, index) => new AdminDetail()
{
PartitionKey = t.PartitionKey,
RowKey = t.RowKey,
Title = t.Title,
Status = t.Status,
Type = t.Type,
Level = t.Level,
Order = t.Order,
Row = index + 1
}).ToList();
答案 2 :(得分:2)
您可以使用Select
overload which provides an index执行此操作,但您可能希望在订购后对AdminDetail
进行投影:
var ordered = from item in _table
orderby item.Order, item.Title
select item;
var details = ordered.Select((t, index) => new AdminDetail
{
PartitionKey = t.PartitionKey,
RowKey = t.RowKey,
Title = t.Title,
Status = t.Status,
Type = t.Type,
Level = t.Level,
Order = t.Order,
Row = index + 1
})
.ToList();
除此之外,这种方式如果_table
是LINQ to SQL表(或类似的东西),则可以在数据库中而不是LINQ to Objects中执行排序。