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

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;

        }

渝公网安备 50011902000225号

渝ICP备18008233号-1