我正在尝试使用Marc Gravell的代码对列进行动态排序。我发布了2个查询。它适用于一种情况,但在第二种情况下不起作用。任何人都能告诉我需要做些什么改变才能使两个查询完美运行?
这是 Marc Gravell 答案的链接:
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
以下是第一个查询的例外:
LINQ to Entities无法识别该方法 “System.Linq.IOrderedQueryable
1[ConsoleApplication12.Order] OrderBy[Order](System.Linq.IQueryable
1 [ConsoleApplication12.Order] System.String)'方法,这个方法无法翻译成 商店表达。
答案 0 :(得分:0)
您需要订购最终结果集,就像在第二情况下一样。在第一种情况下,您只订购northwindEntities.Orders.Where(
结果,不最终结果。
正确的查询是第二个。
答案 1 :(得分:0)
显然,由于与
相同的原因,它不会起作用var query = (from cust in northwindEntities.Customers
select new
{
City = cust.City ,
Orders = northwindEntities.Orders
.MyCustomMethod()
});
不起作用。 LINQ-to-Entities将遍历此表达式树并尝试将其转换为SQL。它可以在已知的子方法集上工作,以转换为SQL。
但在第二个查询中,自定义OrderBy
方法动态创建LINQ-to-Entities知道的OrderBy
。