C#中LINQ to Entities进行日期比较,使用-运算符,比如:
list.FirstOrDefault(s =>(DateTime.Now - s.Updated).TotalHours < 12);
运行后会报下面异常:
DbArithmeticExpression 参数必须具有数值通用类型
解决办法是使用Entity Framework提供的相关方法:
list.FirstOrDefault(s => EntityFunctions.DiffHours(DateTime.Now,s.Updated) < 12);
下面是又一实例:
try
{
// on aa.ddbh + aa.lcmc equals bb.ddbh + bb.lcmc(只能字符与字符相加,数字与数字相加)
var cx_ddxx_ll = from aa in sjklj.sc_llddxx.Where(aa => aa.yq.HasValue == false)
join bb in sjklj.sc_ddxx.Where(bb => bb.czzt == "完工" && bb.yq.HasValue == false)
on aa.ddbh + aa.lcmc equals bb.ddbh + bb.lcmc
select new
{
id_ll = aa.ID,
ID = bb.ID,//ddxx没有设置延期,而且已经完工
//awg=aa.wgrq,
//bwg=bb.wgrq,
yq =System.Data.Objects.EntityFunctions.DiffDays(bb.wgrq,aa.wgrq).Value,
czzt = System.Data.Objects.EntityFunctions.DiffDays(bb.wgrq,aa.wgrq).Value > 0 ? "延期" : (System.Data.Objects.EntityFunctions.DiffDays(bb.wgrq, aa.wgrq).Value == 0 ? "完工" : "提前")
};
this.gv_scjh.AutoGenerateColumns = true;
this.gv_scjh.DataSource = cx_ddxx_ll;
this.gv_scjh.DataBind();
this.Lbl_ts.Text = cx_ddxx_ll.Count().ToString();
return;
}
catch(Exception err)
{
this.Lbl_ts.Text = err.Message;
return;
}