C# 实体框架上的动态Where条件对于带有强制转换的Datetime失败
我使用实体框架4.0中的动态where子句来过滤结果 像 及 其中(“SqlServer.CAST(it.CreatedAt as Date)=@p0”) 他们都失败了 谢谢你的帮助 更新: 错误信息: 找不到类型“日期”。确保加载了所需的架构,并且正确导入了名称空间。 以及查询的位置C# 实体框架上的动态Where条件对于带有强制转换的Datetime失败,c#,entity-framework-4,C#,Entity Framework 4,我使用实体框架4.0中的动态where子句来过滤结果 像 及 其中(“SqlServer.CAST(it.CreatedAt as Date)=@p0”) 他们都失败了 谢谢你的帮助 更新: 错误信息: 找不到类型“日期”。确保加载了所需的架构,并且正确导入了名称空间。 以及查询的位置 it.IsDeleted = true and ( it.OrganizationName ='05 sep 2012' OR Cast( it.CreatedAt as Date ) =@p4 OR
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 ";
}
这对我有用。这并不是完美的,但在我想要的情况下,这是有效的。我们还可以更清洁它
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 ";
}
string temp=SearchedQuery.Trim();
日期时间;
if(DateTime.TryParse(temp,out res))
{
query+=((“(it.+field.Name+”>@p“+i+”);
查询+=“和”;
ObjectParameter pr=新的ObjectParameter(“p”+i,res);
i++;
query+=((“it.+field.Name+”p0是什么?如果是datetime,则是,此处条件将失败。日期!=日期时间。@Arran ObjectParameter pr=new ObjectParameter(@p0”+i,datetime.Now);它是一个对象参数。错误似乎是Cast无效。因为Cast是sql server的。我不知道该如何处理在这种情况下没有eaxmples。是的,它是一个日期时间。日期永远不会等于任何日期时间。您要么需要将其转换为日期时间,要么将其设置为日期时间(DateTime.Today
)@Arran请看我更新的代码。我想我的问题还不够清楚
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 ";
}
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 ";
}