2012-09-27 11 views
6

mój problem jest z() metoda ToLinq:Dlaczego pierwsze zapytanie.ToList() działa, ale drugie nie działa?

Nie understind dlaczego pierwsza praca żądanie bez problemu, ale drugi daje mi wyjątek jak:

(typ węzła wyrażenie LINQ arrayIndex n nie jest obsługiwana w LINQ do podmiotów)

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

Odpowiedz

1

Twój wyjątek stanowi problemu całkiem wyraźnie: nie można używać elementów tablicy wewnątrz wyrazu L2Entities.

3

Nie można używać indeksów z LINQ do encji. Musisz przechowywać wartość tego indeksu w nowej zmiennej.

tak:

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

Można również uzyskać je za pomocą metody równa się w ten sposób:

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