c# - 传递选择器函数时,OrderBy 不会转换为 SQL

标签 c# entity-framework linq-to-entities sql-order-by sql-server-profiler

当我执行时:

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/

相关文章:

entity-framework - 使用EF4选择

c# - 如何在查询 C# 中使用 Linq 和 Dictionary 从 List<> 获取元素?

c# - asp.net core 如何杀死一个线程

c# - 跟踪游戏对象的子级数量

entity-framework - Entity Framework 代码优先与链接表的一对多关系映射

c# - LINQ 左连接可空列给出空引用异常

c# - 如何在 LINQ 中为 var 编制索引?

entity-framework - Entity Framework 代码第一映射(链接)表?

c# - 具有 ASP.NET 标识的 Entity Framework Multi-Tenancy

c# - 使用 LINQ to Entities 更新数据库