DbArithmeticExpression 参数必须具有数值通用类型问题的解决

时间:2025-04-17 18:37:13

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;

}