Why does the first .ToList () request work and the second does not work?

my problem is with the ToLinq () method:

I don’t understand why the first request works without problems, and the second gives me an exception like:

(the node type of the LINQ expression arrayIndex n is not supported in LINQ to Entities)

var q = from a in ctx.ImmImmobilisations select a; q = q.Where(x => x.CodeEntite == "EDEF"); q = q.Where(x => x.CodeAffectation == "000001"); q = q.Where(x => x.Unite == "ITS"); q = q.OrderBy(x => x.CodeImmobilisation); List<ImmImmobilisation> res = q.ToList(); var query = from e in ctx.ImmImmobilisations select e; if (!string.IsNullOrEmpty(args[0])) query = query.Where(x => x.CodeEntite == args[0]); if (!string.IsNullOrEmpty(args[1])) query = query.Where(x => x.CodeAffectation == args[1]); if (!string.IsNullOrEmpty(args[2])) query = query.Where(x => x.CodeFamille == args[2]); if (!string.IsNullOrEmpty(args[3])) query = query.Where(x => x.CodeCCout == args[3]); if (!string.IsNullOrEmpty(unite)) query = query.Where(x => x.Unite == unite); query = query.OrderBy(x => x.CodeImmobilisation); var ress = query.ToList(); 
+6
source share
3 answers

you cannot use indexes with LINQ for objects. You need to store the value of this index in a new variable.

like this:

 var arg1 = args[0]; if (!string.IsNullOrEmpty(arg1)) query = query.Where(x => x.CodeEntite == args1); 
+3
source

Your exception explicitly indicates your problem explicitly: you cannot use array elements inside an L2Entities expression.

+1
source

You can also achieve this using the Equals method as follows:

 if (!string.IsNullOrEmpty(args[0])) query = query.Where(x => Equals(x.CodeEntite, args[0]) ); 
0
source

Source: https://habr.com/ru/post/926406/


All Articles