Динамический Порядок Марка Грэвелла работает в одном случае, но не в другом - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь сделать динамический порядок по столбцам, используя код Марка Гравелла.Я отправляю 2 запроса.Это работает в одном случае, но не работает во втором случае.Кто-нибудь может сказать мне, какие изменения мне нужно внести, чтобы оба запроса работали идеально?

Это ссылка на ответ Марка Грэйвелла :

https://stackoverflow.com/a/233505

Я использую базу данных Northwind.Это оба мои запросы:

 var query = (from cust in northwindEntities.Customers
              select new 
              {
                  City = cust.City ,
                  Orders = northwindEntities.Orders
                       .Where(o => o.CustomerID == cust.CustomerID)
                       .OrderBy("OrderID")
              }); // doesn't work.

 var query = (from cust in northwindEntities.Customers
              select new 
              {
                  City = cust.City ,
                  //Orders = northwindEntities.Orders.Where(o => o.CustomerID == cust.CustomerID).
                  // OrderBy("OrderID")
              }).OrderBy("City"); // works

Вот исключение из 1-го запроса:

LINQ to Entities не распознает метод 'System.Linq.IOrderedQueryable 1[ConsoleApplication12.Order] OrderBy[Order](System.Linq.IQueryable1 [ConsoleApplication12.Order], System.String) ', и этот метод нельзя преобразовать в выражение хранилища.

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Очевидно, что это не будет работать по той же причине, что и

var query = (from cust in northwindEntities.Customers
          select new 
          {
              City = cust.City ,
              Orders = northwindEntities.Orders
                   .MyCustomMethod()
          });

не будет работать. LINQ-to-Entities пройдет через это дерево выражений и попытается преобразовать его в SQL. Он может работать с известным подмножеством методов для перевода в SQL.

Но во втором запросе пользовательский метод OrderBy динамически создает OrderBy, который знает LINQ-to-Entities.

0 голосов
/ 26 марта 2012

Вам нужно заказать окончательный набор результатов, как вы делаете это в случае second .В первом случае вы заказываете только northwindEntities.Orders.Where( результат, а не окончательный.

Правильный запрос - второй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...