【问题标题】:ArgumentException in linq query when using char.isDigit使用 char.isDigit 时 linq 查询中的 ArgumentException
【发布时间】:2016-03-31 10:35:26
【问题描述】:

我有以下简化的 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 的输入表达式。 参数名称:输入 vid System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.BindAs(DbExpression 输入,字符串 varName) vid System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda,DbExpression 输入,DbExpressionBinding& 绑定) 视频

我在这里做错了什么?

【问题讨论】:

  • 通过异常对象名称,我猜是 linq-to-entities 和 EF 核心,但是是的,OP 应该标记它:-)
  • @TimSchmelter 这是 LINQ-to-Entities 和 EF6。

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


【解决方案1】:

错误信息有点奇怪,这意味着这里的 EF 可能存在错误,但问题仍然很清楚:

EF 不知道如何将string.All(p =&gt; char.IsDigit(p)) 转换为 SQL。

您也许可以使用SqlFunctions 中的助手:

PersonnrAreDigits = 
        //pers.Personnr != null && 
        //pers.Personnr.All(p => char.IsDigit(p))
        SqlFunctions.IsNumeric(pers.PersonNr) == 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    相关资源
    最近更新 更多