gpt4 book ai didi

.net - "Cannot call methods on DateTime"和其他限制

转载 作者:行者123 更新时间:2023-12-04 04:58:34 24 4
gpt4 key购买 nike

有谁知道在编译时未捕获的 LINQ to SQL 查询限制的明确列表,以及(在可能的情况下)限制的解决方法?

到目前为止,我们的 list 是:

  • 调用方法如.DateDateTime
  • 未找到解决方法
  • string.IsNullOrEmpty
  • 简单,只需使用 == ""而是
  • .Last()
  • 我们使用了.OrderByDescending(x => x.WhateverProperty).First()
  • 最佳答案

    基本上,这个列表是巨大的......它是相对 small set of things that are handled 之外的所有内容。 .不幸的是,Law Of Leaky Abstractions开始了,每个提供者都有不同的答案......

    LINQ-to-Objects 可以做任何事情(几乎),因为它是委托(delegate); LINQ-to-SQL 和 Entity Framework 有 不同套支持。

    总的来说,我使用 DateTime 取得了相当大的成功。属性等 - 但实际上,您将必须确保您的查询表达式被单元测试覆盖,这样如果您更改提供程序(或提供程序更新),您就会知道它仍然有效。

    我想一种观点是从 TSQL 的角度来思考;没有BOTTOM n , 但有一个 TOP 1 (重新 OrderByDescending );在 string.IsNullOrEmpty 方面,你可以很直白:foo.Bar == null || foo.Bar == "" ;和 DateTime.Date你可以用DATEPART 做很多事情/各种组件。

    LINQ-to-SQL 的另一个选项是将逻辑封装在 UDF 中 - 这样您就可以编写一个采用 datetime 的 UDF。并返回 datetime ,并通过 dbml 将其公开到数据上下文中。然后,您可以在查询中使用它:

    where ctx.Date(foo.SomeDate) == DateTime.Today

    然而,这种方法不一定能很好地利用索引。

    更新:
  • 支持的方法翻译等是here .
  • 支持的查询操作等是here .

  • 有关完整的血腥细节,您可以查看 System.Data.Linq.SqlClient.PostBindDotNetConverter+Visitor在反射器中 - 特别是 Translate...方法;一些 string功能分开处理。所以不是一个巨大的选择 - 但这是一个实现细节。

    关于.net - "Cannot call methods on DateTime"和其他限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/323704/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com