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

ArgumentException in linq query when using char.isDigit

我有以下简化的 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 requires an input expression with a collection ResultType. Parameternamn: input vid System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.BindAs(DbExpression input, String varName) vid System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding) vid

我这里做错了什么?

错误信息有点奇怪,这意味着这里可能存在 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