将字符串解析为 Expression> 中的 DateTimeOffset

发布于 2024-08-08 11:32:14 字数 529 浏览 10 评论 0 原文

嘿,我正在尝试创建一个 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);

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

Hey, I am trying to create an Expression<Func<T, bool>> in which a string property is converted/cast to a DateTimeOffset so that DateTimeOffset operations can be performed on it.

We are using Linq2SQL as our data provider, which does support converting strings to the SQL equivalent of DateTimeOffset. Ideally I want the expression to be evaluated directly inside the IQueryable data source, and not in memory as an IEnumerable.

See below for an example of what I have tried to far:

public class MyClass
{
    public string MyValue;
}

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

Unfortunately this definition of filter causes an in memory evaluation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

过去的过去 2024-08-15 11:32:14

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

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

Since the underlying physical table column is nvarchar not datetime, I think you are out of luck. The LINQ2SQL provider knows that it is nvarchar data, and therefore will not generate native SQL expressions that deal with it as a datetime 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 as String, then convert it to DateTimeOffset, then manually filter it in memory. If you want native SQL filtering on this column, you need to change the table schema.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文