我有这个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.Expression1[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();
答案 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));
});