Почему метод 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, результат будет один и тот же каждый раз и последователен.

Надеюсь, что это поможет.