2016-03-31 10 views
0

Ich habe folgende vereinfachte Linq-Abfrage:Argument in Linq-Abfrage bei der Verwendung von 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; 

wo pers.Personnr eine Zeichenfolge ist. Ich erhalte folgende Ausnahme:

System.ArgumentException: DbExpressionBinding erfordert einen Eingangsausdruck mit einer Sammlung Result. Parameternamn: Eingabe vid System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.BindAs (DbExpression Eingabe, String varName) vid System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda (LambdaExpression Lambda DbExpression, Eingang, DbExpressionBinding & Bindung) vid

Was mache ich falsch hier tun?

+0

Mit Ausnahme Objektnamen, ich denke, Linq-zu-Entitäten und EF-Kern, aber ja, OP sollte es :-) – Jcl

+0

Tag @ TimSchmelter das sind LINQ-to-Entities und EF6. – HischT

Antwort

3

Die Fehlermeldung ist ein wenig seltsam, was bedeutet, dass es vielleicht hier um einen Fehler in EF, aber das Problem ist immer noch klar:

EF nicht weiß, wie string.All(p => char.IsDigit(p)) zu SQL übersetzen.

Sie könnten in der Lage, die Helfer in SqlFunctions zu verwenden:

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