Csharp/C#教程:动态LINQ日期时间比较字符串构建 – Linq To实体分享


动态LINQ日期时间比较字符串构建 – Linq To实体

我正在使用Scott Guthrie的动态LINQ库以及Entity Framework和C#。

我必须根据几个因素将where字符串构建到变量中,然后将字符串变量传递给where子句。 出于某种原因,这将有效:

ContactList = ContactList.Where("DateAdded >= @0", DateTime.Parse("12/1/2012")); 

但这不起作用

 string WhereClause = string.Format("DateAdded >= {0}", DateTime.Parse("12/1/2012")); ContactList = ContactList.Where(WhereClause); 

如上所述,我需要在传递变量的版本中使用它。 谁知道为什么第二个不起作用?

提前致谢!

我能够使用这里的信息使用稍微不同的字符串格式。

这样做对我来说很好:

 ContactList.Where("DateAdded >= DateTime(2013, 06, 18)") 

请注意,这与DateTimeOffset列完全不兼容。

对于当前的DynamicLINQ库,我似乎无法做到这一点。 Tilak在下面很好地概述了它不起作用的原因。

我的解决方案是修改DynamicLINQ库以允许将查询写为字符串并传递给Date / Time数据类型的where子句。 Paul Hatcher在此发现了修改: LINQ TO SQL,带DATE类型字段的动态查询

ObjectQuery.Where重载接受2个参数。

  1. string predicate
  2. params ObjectParameter[] parameters

在您的第一个示例中, Where使用ObjectParameter参数构建查询(where子句)(使用ObjectParameter Name,Type和Value)

在第二个示例中,传递的任何内容都被视为final where子句(没有基于传递的参数的数据类型进行内部转换)。

根据Richard Rout的选择,稍加修改:

 ContactList.Where("DateAdded >= DateTime(2013, 06, 18)") 

这适用于我的Linq2Entities解决方案。 请注意DateTime而不是Date 。 希望这可以节省这个问题给我带来的麻烦。

ContactList.Where可能会在非数字参数(例如DateTime)周围ContactList.Where引号。 在第二个字符串中,未引用日期。

上述就是C#学习教程:动态LINQ日期时间比较字符串构建 – Linq To实体分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1038898.html

(0)
上一篇 2022年1月26日
下一篇 2022年1月26日

精彩推荐