LINQ增量值不起作用

时间:2018-03-09 13:56:31

标签: c# asp.net asp.net-mvc linq

我有这个Linq

var company = db.Companies.Where(x => x.id == Id).Select(x => new Company
        {
            Id = x.id,
            Description = x.Description,
            Website = x.Website,
            Zip = x.Zip,
            Actions = db.Actions.Where(a => a.UserCompanyId == Id).Select((a, index) => new CompanyActions
            {
                Id = index + 1,
                Name = a.Name,
                Duration = (int)a.Duration
            }).ToList()
        })
            .FirstOrDefault();

我想获得行动的同义词 - 1,2,3,4,5,6,7,8 ......

但在这种情况下索引不起作用。

  

错误 - + $ exception {" LINQ to Entities无法识别方法' System.Linq.IQueryable 1 Select(System.Linq.IQueryable 1,System.Linq.Expressions.Expression 1[System.Func 3 ])'方法,并且此方法无法转换为存储表达式。"} System.NotSupportedException

所有问题是如何在动作中增加(+1)Id?想要查看1-名称2 - 名称3名称

这项工作很好

  var company = db.Companies.Where(x => x.id == Id).AsEnumerable().Select(x => new Company
        {
            Id = x.id,
            Description = x.Description,
            Website = x.Website,
            Zip = x.Zip,
            Actions = db.Actions.Where(a => a.UserCompanyId == Id).AsEnumerable().Select((a, index) => new CompanyActions
            {
                Id = index + 1,
                Name = a.Name,
                Duration = (int)a.Duration
            }).ToList()
        })
            .FirstOrDefault();

2 个答案:

答案 0 :(得分:1)

异常非常明确:您在查询中使用的方法无法被实体识别。

实体框架必须翻译您对数据库的查询;但是一个通常在SQL上运行的数据库并不能理解更复杂的方法,比如EIS 1(这并不等同于SQL EIS)。

所以一开始,你正在使用Linq-to-Sql,但之后你想使用Linq-to-Objects。

为此,您必须将第一部分转换为可枚举部分,然后继续查询。

类似的东西:

Select

答案 1 :(得分:0)

您需要将计数器增量移到LINQ表达式之外,因为它不支持动态计算和/或某些字符串操作。

尝试添加到查询的末尾:

const strings = [
  "X6JV2YUW8T",
  "JN1H86LEKA",
  "111JEJE134",
  "A111111111",
  "ABCDEFGHIJ",
  "0123456789"
];
const pattern = /^(?=(?:[a-z0-9]*[a-z]))(?=(?:[a-z0-9]*[0-9]){3})[a-z0-9]{10,}$/i;

strings.forEach(s => {
  console.log(s + " :" + pattern.test(s));
});