1

嘿,我正在尝试创建Expression<Func<T, bool>>一个字符串属性被转换/转换为 DateTimeOffset 以便可以对其执行 DateTimeOffset 操作。

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

请参阅下面的示例,了解我到目前为止所做的尝试:

public class MyClass
{
    public string MyValue;
}

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

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

4

1 回答 1

1

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

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

于 2009-10-21T16:38:29.923 回答