为什么Linq对实体选择方法翻转投影列表属性

本文关键字:翻转 投影 列表 属性 方法 选择 Linq 实体 为什么 | 更新日期: 2023-09-27 18:01:18

我有最奇怪的行为与linq实体/Json/MVC.net 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()来解决它,但我仍然想知道为什么会发生这种行为。

更多信息:EF 4.4 (tt生成上下文),SQL Server 2008r2 express . net 4.0, MVC 3.0, Vanilla System.Web.Mvc。JsonResult表包含一个int型主键,浮点值(最后一个为int

为什么Linq对实体选择方法翻转投影列表属性

)

Try

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

在您的方式输出只是上下文生成的脚本获取数据Json()

添加一个。toarray,看看会得到什么。记住linq (Select..)exc)只在IEnumerator被调用时执行。

我认为如果你添加ToArray,结果将是相同的,每次都是一致的。

希望对你有帮助。