2016-01-28 2 views
0

Мне очень сложно создать порядковый номер для моего списка, используя Linq Select.Как можно сгенерировать порядковый номер внутри LINQ?

Я попытался использовать обычную переменную i, а затем увеличил ее, но она не работает.

var grouped = (from x in jOMACDetails 
         group x by new { x.MAWorkCode, x.ConstructionNumber } into g 
         let f = g.First() 
         select new UtilityReceivingReportDetailEntity 
         { 
          DefaultAccountCode = string.IsNullOrWhiteSpace(f.AccountTitleCode) ? f.AccountTitleName.Trim() : f.AccountTitleCode.Trim(), 
          CompanyID = CurrentContext.CurrentCompanyID, 
          RRNumber = socnumber.Trim(), 
          RRSequenceNumber = (short)???, // <---- Here is the container the I need to be sequence 
          //............... 
         }).AsEnumerable(); 

Может кто-нибудь мне помочь? Заранее спасибо

+0

Просьба указать код для класса _UtilityReceivingReportDetailEntity_ Каков тип данных для RRSequenceNumber? – Steve

+0

Какая последовательность? Любой пример немного очистит ваш вопрос. –

+0

короткое @Steve – qwerzxcxyz

ответ

8

Вы можете попробовать Select() перегрузку, которая проецирует каждый элемент последовательности в новую форму, автоматически добавляя индекс элемента:

var grouped = jOMACDetails.GroupBy(x => new { x.MAWorkCode, x.ConstructionNumber }) 
    .Select(g => g.First()) 
    .Select((r, index) => new UtilityReceivingReportDetailEntity 
     { 
      DefaultAccountCode = string.IsNullOrWhiteSpace(r.AccountTitleCode) ? r.AccountTitleName.Trim() : r.AccountTitleCode.Trim(), 
      CompanyID = CurrentContext.CurrentCompanyID, 
      RRNumber = socnumber.Trim(), 
      RRSequenceNumber = index 
     }) 
    .AsEnumerable(); 

К сожалению, нет никакого выражения запроса, который использует эту перегрузку. Итак, я написал свой ответ в синтаксисе метода. Но после завершения выражения запроса вы можете использовать .Select. Но, ИМХО, нет необходимости.

2

Вы ищете это?

var i = 0; 
var grouped = (from x in jOMACDetails 
    group x by new { x.MAWorkCode, x.ConstructionNumber } into g 
    let f = g.First() 
    select new UtilityReceivingReportDetailEntity 
    { 
     DefaultAccountCode = string.IsNullOrWhiteSpace(f.AccountTitleCode) ? f.AccountTitleName.Trim() : f.AccountTitleCode.Trim(), 
     CompanyID = CurrentContext.CurrentCompanyID, 
     RRNumber = socnumber.Trim(), 
     RRSequenceNumber = i++ 
    }).AsEnumerable(); 
+0

Gotta попробовать. Я отвечу позже. – qwerzxcxyz

Смежные вопросы