2011-12-11 51 views
2

我使用
ObjectQuery构建select和where实体ObjectSet类的条件。实体SQL DateDiff函数

ObjectQuery<DbDataRecord> query = context.TestEnt.Select("it.BuySell, " 
         + "it.DepoTerm").Where("Datediff(day,it.RunDateTime,'22-11-2012')=0"); 

       var a = query.ToList(); 
       foreach (var tmp in a) 
       { 
        Console.WriteLine(tmp["BuySell"].ToString()); 
       } 

我想用DATEDIFF函数在我这里contition, 我该怎么办呢?

+0

我不知道,但无法在实体框架(可能在LINQ)。但问题是,你也使用Linq.Dynamic类吗? –

回答

2

试试这个:

var query = context.TestEnt 
        .Where("DiffDays(it.RunDateTime,'22-11-2012')=0"); 
        .Select("it.BuySell, it.DepoTerm") 

这可能是你将不得不调用CreateDataTime你的字符串传递数据,使其工作。 Here是ESQL中所有支持的日期函数的列表。

您还可以使用LINQ到实体:

var query = context.TestEnt 
        .Where(x => SqlFunctions.DateDiff("day", x.RunDateTime,'22-11-2012') == 0) 
        .Select(x => new { x.BuySell, x.DepoTerm }); 
+0

不幸的是“DiffDays(it.RunDateTime,'22 -11-2012')= 0”)不起作用 –

0

的ESQL功能DiffDays的工作,但它的繁琐得到它的权利。您必须将字符串转换为DateTime;但是,由于使用CreateQuery<>方法将文本转换为SQL,因此您需要将其转换为System.DateTime,否则查询将在运行时失败。

试试这个:

ObjectQuery<DbDataRecord> query = context.TestEnt.Select("it.BuySell, it.DepoTerm") 
    .Where("DiffDays(it.[RunDateTime],cast('22-11-2012' as System.DateTime))=0"); 

var a = query.ToList(); 
foreach (var tmp in a) 
{ 
    Console.WriteLine(tmp["BuySell"].ToString()); 
}