使用char.isDigit时linq查询中的ArgumentException

时间:2016-03-31 10:35:27

标签: c# entity-framework linq linq-to-entities

我有以下简化的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

我在这里做错了什么?

1 个答案:

答案 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