如何在 LINQ 选择中生成序列号

本文关键字:序列号 选择 LINQ | 更新日期: 2023-09-27 18:32:11

我很难使用 Linq Select 为我的列表生成序列号。

我尝试使用一个普通变量,然后在内部递增它,但它不起作用。

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();

有人可以帮助我吗?提前致谢

如何在 LINQ 选择中生成序列号

> 您可以尝试重载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。但是,恕我直言,没有必要。

你在找这个吗?

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();