2009-10-20 79 views
1

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

我们使用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); 

不幸的是过滤器的这个定义在内存计算导致。

+0

我很困惑。物理表列是'char'还是'datetime'? – 2009-10-20 20:09:10

+0

在SQL中,列是一个字符串(我相信nvarchar) – NoizWaves 2009-10-20 22:44:26

回答

1

由于底层物理表列是nvarchar而不是datetime,所以我觉得你运气不好。 LINQ2SQL提供程序知道它是nvarchar数据,因此不会生成处理它的原生SQL表达式作为datetime值。

说实话,我甚至无法看到用原始手工制作的SqlCommand物体做到这一点的安全方法。你真的应该将数据读入内存中作为String,然后将其转换为DateTimeOffset,然后手动将其过滤到内存中。如果您希望对此列进行本地SQL筛选,则需要更改表格模式。

相关问题