-->

动态LINQ的DateTime比较字符串大厦 - LINQ到实体(Dynamic LINQ Dat

2019-07-17 18:55发布

我使用的是由Scott Guthrie的动态LINQ库连同实体框架和C#。

我要建立我在那里字符串分解成几个因素的变量,然后将字符串变量传递给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);

如前所述,我需要传递变量的版本来使用它。 任何人都知道为什么第二次不起作用?

提前致谢!

Answer 1:

我能得到它与一个稍微不同的字符串格式使用的信息工作在这里 。

这样做的工作对我罚款:

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

注意这并不在所有的工作DateTimeOffset列。



Answer 2:

看来我试图做是不可能与当前DynamicLINQ库。 它不工作的原因,是深受提拉克概述如下。

我的解决办法是修改DynamicLINQ库,允许查询被写成一个字符串,并传递给那里的日期/时间数据类型子句。 修改发现这里由保罗·海切尔: LINQ to SQL中,与DATE类型字段动态查询



Answer 3:

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

  1. string predicate
  2. params ObjectParameter[] parameters

在你的第一个例子, Where建立使用查询(WHERE子句) ObjectParameter (使用名称,类型和价值参数ObjectParameter

在第二个例子中,无论是通过在where子句(没有内部转换基础上进行传递的参数的数据类型)作为最终的处理。



Answer 4:

基于理查德溃败的选项,有轻微的修改:

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

这部作品在我的Linq2Entities解决方案。 请注意, DateTime ,而不是Date 。 希望这样可以节省别人这个问题让我头疼。



Answer 5:

ContactList.Where可能放在引号内,非数字的参数(如日期时间)。 在你的第二个字符串中的日期不报价。



文章来源: Dynamic LINQ DateTime Comparison String Building - Linq To Entities