2012-09-27 8 views
6

mi problema es con el método ToLinq():¿Por qué, el primer query.ToList() funciona, pero el segundo no funciona?

yo no understind eso que el primer trabajo de solicitud sin problema, pero la segunda me dan una excepción como:

(el tipo de nodo de la expresión LINQ arrayIndex n no es compatible con LINQ a Entidades)

  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(); 

Respuesta

1

su excepción declara su problema bastante explícita: no se pueden utilizar elementos de la matriz dentro de la expresión L2Entities.

3

no puedes usar indexadores con LINQ para las entidades. Necesita almacenar el valor de ese índice en una nueva variable.

así:

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

También puede lograrlo utilizando el método Equals esta manera:

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