【问题标题】:Parse string as DateTimeOffset in Expression<Func<T, bool>>在 Expression<Func<T, bool>> 中将字符串解析为 DateTimeOffset
【发布时间】:2010-12-08 05:18:05
【问题描述】:

嘿,我正在尝试创建一个Expression&lt;Func&lt;T, bool&gt;&gt;,其中将字符串属性转换/强制转换为 DateTimeOffset,以便可以对其执行 DateTimeOffset 操作。

我们使用 Linq2SQL 作为我们的数据提供者,它确实支持将字符串转换为 SQL 等效的 DateTimeOffset。理想情况下,我希望直接在 IQueryable 数据源内部计算表达式,而不是作为 IEnumerable 在内存中计算。

以下是我尝试过的示例:

public class MyClass
{
    public string MyValue;
}

Expression<Func<MyClass, bool>> filter = mc => DateTimeOffset.Parse(mc.MyValue) > new DateTimeOffset(2007,1,1);

不幸的是,过滤器的这种定义会导致内存评估。

【问题讨论】:

  • 我很困惑。物理表列是char 还是datetime
  • 在 SQL 中,该列是一个字符串(我相信是 nvarchar)

标签: linq linq-to-sql .net-3.5 datetimeoffset


【解决方案1】:

由于底层物理表列是nvarchar 而不是datetime,我认为你不走运。 LINQ2SQL 提供程序知道它是 nvarchar 数据,因此不会生成将其作为 datetime 值处理的本机 SQL 表达式。

说实话,我什至看不到使用原始手工制作的 SqlCommand 对象的安全方法。您确实应该将数据以String 读入内存,然后将其转换为DateTimeOffset,然后手动将其过滤到内存中。如果您想对此列进行原生 SQL 过滤,则需要更改表架构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多