带有Cast的日期时实体框架上的条件失败的动态

时间:2012-09-11 14:55:50

标签: c# entity-framework-4

我正在使用带有Entity Framework 4.0的动态where子句来过滤结果。

喜欢

ObjectQuery<T> tmp =  _context.MyTable.where("it.CreatedAt = @p0");

@ p0是一个对象参数

这完全没问题。

但问题是我想要的东西:

where("CAST(it.CreatedAt as Date) = @p0");

和     where(“SqlServer.CAST(it.CreatedAt as Date)= @ p0”);

他们都失败了。

感谢任何帮助

更新:

错误信息:

无法找到“日期”类型。确保加载了所需的模式并正确导入名称空间。

where查询

 it.IsDeleted = true  and (  it.OrganizationName ='05 sep 2012' OR  Cast( it.CreatedAt as Date )  =@p4 OR  1=0 ) 

已提供对象参数。

目前通过的价值是'9/5/2012 12:00:00 AM' 和喜欢:

string temp = SearchedQuery.Trim();
 DateTime res;
 if (DateTime.TryParse(temp, out res))
{
 query += ((" Cast( it." + field.Name +  " as Date )  =@p" + i + ""));

 ObjectParameter pr = new ObjectParameter("p" + i, res);

 param.Add(pr);

 query += " OR ";
}

1 个答案:

答案 0 :(得分:0)

这对我有用。这不是完美的,但在我想要的某些情况下工作。我们也可以更清洁它

 string temp = SearchedQuery.Trim();
 DateTime res;
 if (DateTime.TryParse(temp, out res))
 {
 query += ((" ( it." + field.Name + " >@p" + i + ""));

 query += " AND ";

 ObjectParameter pr = new ObjectParameter("p" + i, res);

 i++;

 query += ((" it." + field.Name + " <@p" + i + " ) "));

 ObjectParameter pr1 = new ObjectParameter("p" + i, res.AddDays(1));

 param.Add(pr);
 param.Add(pr1);


 query += " OR ";
}