2

Entity Framework 5 を使用している場合、なぜこれが機能するのでしょうか?

var query = Categories.Select(c => new 
    { 
        Products = c.Products.OrderBy(p => p.Name) 
    });

これはしませんが?

Func<Product, string> selector = p => p.Name;
var query = Categories.Select(c => new 
    { 
        Products = c.Products.OrderBy(selector) 
    });

スローされる例外は次のとおりです: クエリ演算子 'OrderBy' に使用されるサポートされていないオーバーロード。

4

3 に答える 3

0

を作成selectorしても、Expression<Func<Product, string>>は直接動作せず、c.Productsは ではないためコンパイルされませんIQueryable<T>。のみを実装する単なるコレクション型IEnumerable<T>です。Enumerable.OrderBy式はパラメーターとして受け入れず、デリゲートのみを受け入れます。

ただし、EF にはデリゲートではなく式が必要です。トリックはAsQueryable()、ナビゲーション コレクションで使用することです。

Expression<Func<Product, string>> selector = p => p.Name;
var query = Categories.Select(c => new 
{ 
    Products = c.Products.AsQueryable().OrderBy(selector) 
});
于 2013-07-22T18:02:55.070 に答える