C# 如何在LinQ的IQueryable查询中添加序列号?

C# 如何在LinQ的IQueryable查询中添加序列号?,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,这是我返回IQueryable查询的方法。我想根据记录的数量生成序列号 public IQueryable<CompanyModel> GetCompanyData() { var query = (from e in Context.tblCompany where e.Cmp_Id == this.CompanyId && e.TenantId == thi

这是我返回IQueryable查询的方法。我想根据记录的数量生成序列号

public IQueryable<CompanyModel> GetCompanyData()
{

   var query = (from e in Context.tblCompany
                         where e.Cmp_Id == this.CompanyId
                         && e.TenantId == this.TenantId
                         select new CompanyModel()
                         {
                             CmpId = e.Cmp_Id,
                             SrNo = 0,
                         });
   return query;
}
public IQueryable GetCompanyData()
{
var query=(来自Context.tblCompany中的e)
其中e.Cmp_Id==this.CompanyId
&&e.TenantId==this.TenantId
选择新公司模型()
{
CmpId=e.Cmp\u Id,
SrNo=0,
});
返回查询;
}

据我所知,查询本身生成序列号的唯一方法是使用带有2个参数的“Select”方法重载,但是它不适用于IQueryable,因此您的查询将如下所示:

Context.tblCompany.Where(e => e.Cmp_Id == this.CompanyId && e.TenantId == this.TenantId)
    .Select(e => new { CmpId = e.Cmp_Id })
    .AsEnumerable()
    .Select((e, i) => new CompanyModel { CmpId = e.CmpId, SrNo = i });

显然,这个序列号将在客户机上生成,结果表达式不能再被视为IQueryable。同时,“AsEnumerable”之前的部分将成功转换为SQL。

您可以尝试下面的代码,它可能会对您有所帮助

public IQueryable<CompanyModel> GetCompanyData()
{

List<CompanyModel> query = (from e in Context.tblCompany
                         where e.Cmp_Id == this.CompanyId
                         && e.TenantId == this.TenantId
                         select new CompanyModel()
                         {
                             CmpId = e.Cmp_Id,
                             SrNo = 0,
                         }).ToList();

 int counter=0;
 query.Foreach(x=>x.SrNo = counter++);

return query;
}
public IQueryable GetCompanyData()
{
列表查询=(来自Context.tblCompany中的e)
其中e.Cmp_Id==this.CompanyId
&&e.TenantId==this.TenantId
选择新公司模型()
{
CmpId=e.Cmp\u Id,
SrNo=0,
}).ToList();
int计数器=0;
Foreach(x=>x.SrNo=counter++);
返回查询;
}

是什么阻止了你?你试过什么,什么不起作用?你具体在问什么?你是什么意思?序列号是标识零件或产品的唯一编号。你是说排号吗
Select()
有一个重载
Select((项目,索引))
将项目索引传递给代理。您可以在执行查询之前使用此选项,方法是枚举查询或调用
ToList()
t串行no means SrNo字段显示值从1到最多记录个数,例如:Sr no Company Id 1 2 3声音像xy问题。你想达到什么目标?可能有一种没有序列号的替代方案。