我有以下简化的linq查询:
IQueryable<PersonListItemDbTemp> query =
from pers in db.Person
join pe in db.PersonExtra on pers.PersonID equals pe.PersonID into ppe
from personExtra in ppe.DefaultIfEmpty()
select new PersonListItemDbTemp()
{
PersonnrAreDigits = pers.Personnr != null && pers.Personnr.All(p => char.IsDigit(p))
};
return query;
其中pers.Personnr是一个字符串。我得到以下例外:
System.ArgumentException:DbExpressionBinding需要一个带有ResultType集合的输入表达式。 Parameternamn:输入 vid System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.BindAs(DbExpression输入,String varName) vid System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda,DbExpression输入,DbExpressionBinding&amp; binding) vid
我在这里做错了什么?
答案 0 :(得分:3)
错误信息有点奇怪,这意味着EF中可能存在错误,但问题仍然很明显:
EF不知道如何将string.All(p => char.IsDigit(p))
转换为SQL。
您可以在SqlFunctions中使用帮助程序:
PersonnrAreDigits =
//pers.Personnr != null &&
//pers.Personnr.All(p => char.IsDigit(p))
SqlFunctions.IsNumeric(pers.PersonNr) == 1