2

私が実行すると:

var t = db.Table1.OrderBy(x => x.Name).ToList();

SQL プロファイラーでは、これは変換された SQL です。

SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[Name] AS [Name]
FROM [dbo].[Table1] AS [Extent1]
ORDER BY [Extent1].[Name] ASC

どちらが正しい。

ただし、セレクター関数を OrderBy に渡すと、次のようになります。

Func<Table1, string> f = x => x.Name;
var t = db.Table1.OrderBy(f).ToList();

変換された SQL は次のとおりです。

SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[Name] AS [Name]
FROM [dbo].[Table1] AS [Extent1]

orderby は完全に翻訳されていません。

どうしたの?それらは同じラムダ関数です。唯一の違いは2番目のケースで、最初に変数に割り当てられます。

4

1 に答える 1

3

IQueryable の世界ではExpression<Func<TModel, TValue>>、 OrderBy の拡張パラメータとして ではなくが必要です。Func<TModel, TValue>

http://msdn.microsoft.com/en-us/library/system.linq.queryable.orderby

于 2012-08-31T11:11:36.217 に答える