16

我对 linq to entity / 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

4

2 回答 2

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

在您的输出方式中,生成的获取数据脚本的上下文可能是它在大小 Json() 中执行多次

于 2013-06-03T15:53:43.613 回答
0

添加一个 .ToArray 看看你得到了什么。请记住,linq (Select.. exc) 仅在调用 IEnumerator 时执行。

我想如果你添加 ToArray,每次的结果都是一样的,而且是一致的。

希望有帮助。

于 2013-05-26T23:17:09.377 回答