当我执行时:
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 完全没有翻译。
有什么问题吗?它们是相同的 lambda 函数,唯一的区别是第二种情况,它首先分配给一个变量。
最佳答案
因为在 IQueryable 世界中,您需要 Expression<Func<TModel, TValue>>
作为 OrderBy 的扩展参数,而不是 Func<TModel, TValue>
http://msdn.microsoft.com/en-us/library/system.linq.queryable.orderby
关于c# - 传递选择器函数时,OrderBy 不会转换为 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12210799/