【问题标题】:Which where clauses in LINQ are converted to where clauses in a database queryLINQ 中的哪些 where 子句转换为数据库查询中的 where 子句
【发布时间】:2013-06-27 22:30:16
【问题描述】:

我刚刚开始阅读有关 LINQ 的内容,但有一件事一直困扰着我。 LINQ 将 LINQ 查询转换为对数据库服务器的相应 SQL 查询。由于我怀疑 LINQ 是否可以将任何代码转换为 SQL 语句,我必须假设这里有一些限制。

由于我希望尽可能限制发送到服务器的查询,那么 LINQ 可以转换为 SQL,而 LINQ 不能转换为 SQL?

例如where employee.name == "Test" 看起来很容易转换,但是where isEven(employee.number) 呢?或者更复杂的东西?

【问题讨论】:

  • 您会发现方法调用会抛出异常,因为 LINQ 将表达式树转换为 SQL。它无法转换方法的随机复杂逻辑。话虽如此.. 有一些内置的 .NET 函数,LINQ 可以很容易地识别和转换..
  • @SimonWhitehead 谢谢,这是有道理的,听起来像是解决这个问题的明智之举。

标签: c# performance linq linq-to-sql


【解决方案1】:

Here 是 MSDN 页面,详细说明了 LINQ to SQL 支持的方法。

您将无法在表达式树中使用自己的方法调用,因为 LINQ to SQL 不了解如何将方法转换为 SQL。

一些 ORM(例如 NHibernate)允许您为自己的方法定义自己的生成器来生成 SQL(NHibernate 中的 HQL),我不相信 L2S 支持这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多