2016-03-31 38 views
0

我有以下簡單的LINQ查詢時:的ArgumentException在LINQ查詢使用char.isDigit

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輸入,字符串的varName) VID System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression拉姆達,DbExpression輸入,DbExpressionBinding &結合) VID

什麼我錯在這裏做什麼?

+0

通過異常對象的名字,我想LINQ到實體和EF的核心,但是,是,OP應該標記它:-) – Jcl

+0

@ TimSchmelter這是LINQ-to-Entities和EF6。 – HischT

回答

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