2012-09-27 14 views
6

私の問題は、ToLinq()メソッドを使用することです:なぜ、最初のquery.ToList()は動作しますが、2番目のクエリは機能しませんか?

私は問題なく、なぜ最初の要求の作業をunderstindが、2番目の私のような例外与えていない:

LINQの式の(ノードタイプをarrayIndex n個のエンティティへのLINQでサポートされていません)

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

答えて

1

あなたの例外は非常に明確にあなたの問題を述べている:あなたはL2Entities表現の内部に配列要素を使用することはできません。

3

エンティティに対してLINQでインデクサを使用することはできません。 そのインデックスの値を新しい変数に格納する必要があります。このような

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

ます。また、このようEqualsメソッドを使用してそれを達成することができます

if (!string.IsNullOrEmpty(args[0])) 
    query = query.Where(x => Equals(x.CodeEntite, args[0])); 
関連する問題