将字符串解析为 Expression> 中的 DateTimeOffset
嘿,我正在尝试创建一个 Expression
,其中字符串属性被转换/转换为 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);
不幸的是,过滤器的这个定义会导致内存评估。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于底层物理表列是
nvarchar
而不是datetime
,我认为你运气不好。 LINQ2SQL 提供程序知道它是nvarchar
数据,因此不会生成将其作为datetime
值处理的本机 SQL 表达式。老实说,我什至看不到使用原始手工制作的
SqlCommand
对象来执行此操作的安全方法。您确实应该将数据作为String
读入内存,然后将其转换为DateTimeOffset
,然后在内存中手动过滤它。如果您想对此列进行本机 SQL 过滤,则需要更改表架构。Since the underlying physical table column is
nvarchar
notdatetime
, I think you are out of luck. The LINQ2SQL provider knows that it isnvarchar
data, and therefore will not generate native SQL expressions that deal with it as adatetime
value.To be honest, I can't even see a safe way of doing this with raw hand-crafted
SqlCommand
objects. You really ought to read the data into memory asString
, then convert it toDateTimeOffset
, then manually filter it in memory. If you want native SQL filtering on this column, you need to change the table schema.