为什么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
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,结果将是相同的,每次都是一致的。
希望对你有帮助。