Почему метод Linq to Entity Select Flip flopping проецирует свойства списков?
У меня есть странное поведение с linq для entity/Json/MVC.net 4
У меня есть этот бит кода, и по какой-то нечетной причине каждый другой порядок свойств списка отменяется.
var output = db.FooBar.Where(a => a.lookupFoo == bar)
.Select(a => new List<double>{
//value 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]
]
};
Мне удалось обойти это, поставив toList()
между Where и Select, но мне все равно хотелось бы знать, почему это происходит.
Дополнительная информация:
EF 4.4 (tt сгенерированный контекст), SQL Server 2008r2 Express.NET 4.0, MVC 3.0, Vanilla System.Web.Mvc.JsonResult, таблица состоит из первичного ключа int, float для значений, исключающих последний, который является int
Ответы
Ответ 1
Try
var output = db.FooBar.Where(a => a.lookupFoo == bar)
.Select(a => new List<double>{
//value 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);
На вашем пути выводит только контекст сгенерированного script для получения данных
может быть, это Excute manytime in size Json()
Ответ 2
Добавить .ToArray и посмотреть, что вы получаете. Помните, что linq (Select.. exc) выполняется только при вызове IEnumerator.
Я думаю, что если вы добавите ToArray, результат будет один и тот же каждый раз и последователен.
Надеюсь, что это поможет.