我需要使用LINQ为集合的实例添加唯一的id

时间:2012-01-15 11:52:26

标签: c# .net linq

我有以下类用于保存仅用于报告的数据。

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做到这一点?

3 个答案:

答案 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中执行排序。