动态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个参数。
-
string predicate
-
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