c# trueforall なぜLinq to Entity Selectメソッドは、投影リストプロパティをフリップフロップするのですか?




linq trueforall (2)

私はエンティティ/ Json / MVC.netへのlinqの最も奇妙な動作を持っています4

私はこのようなコードを持っていて、何らかの奇妙な理由のために、他のすべてのリストのプロパティの順序が逆転しています。

var output = db.FooBar.Where(a => a.lookupFoo == bar)
                      .Select(a => new List<double>{
                                     //value's are the same per row 
                                     //for demonstration sake.
                          a.fooBarA,  //Always 12.34
                          a.fooBarB,  //Always 12.34
                          a.fooBarC,  //Always 0
                          a.fooBarD  //Always 0 //lazy casting to double from int
                      });
return Json(new {output});

出力は次のようになります。

{
  "output": [
    [12.34, 12.34, 0,     0], 
    [0,     0,     12.34, 12.34], 
    [12.34, 12.34, 0,     0],
    [0,     0,     12.34, 12.34]
  ]
};

私は、WhereとSelectの間にtoList()置くことでtoList()することができましたが、なぜこの動作が起こっているのか知りたいのですが。

詳細情報:EF 4.4(tt生成コンテキスト)、SQL Server 2008r2 express .NET 4.0、MVC 3.0、Vanilla System.Web.Mvc.JsonResult、テーブルはint主キーで構成され、最後の1つを除く値


試す

var output = db.FooBar.Where(a => a.lookupFoo == bar)
                  .Select(a => new List<double>{
                                 //value's are the same per row 
                                 //for demonstration sake.
                      a.fooBarA,  //Always 12.34
                      a.fooBarB,  //Always 12.34
                      a.fooBarC,  //Always 0
                      a.fooBarD  //Always 0 //lazy casting to double from int
                  }).toList();
return Json(output);

あなたのやり方では、ちょうどコンテキストを出力するために、データを取得するために生成されたスクリプトは、


.ToArrayを追加して、あなたが得るものを見てください。 linq(Select .. exc)は、IEnumeratorが呼び出されたときにのみ実行されることに注意してください。

あなたがToArrayを追加すると、その結果は毎回同じで、一貫していると思います。

希望が役立ちます。





linq-to-entities