关于EF查询的问题

在项目中,使用EF的orm框架,但是EF的查询不支持像sqlsugar一样的写法。例如在查询中不允许出现c#代码的写法,否则会报错,告诉你GroupJoin等报错信息:

无法将表达"Table(Doc_ExpressArrive).GroupJoin(Table(InStore_Order),a=>a.OrderNo,b=>b.OrderNo)…“
在这里插入图片描述

这个报错信息我一直以为是多表链接时候的问题报错,后来发现是字段查询用了string.IsNullOrEmpty()的原因。
错误代码:

 var result=(from ea in db.Doc_ExpressArrive
                               join od in db.InStore_Order on ea.CaiGouNo equals od.OrderNo into temp
                               from od in temp.DefaultIfEmpty()
                               join cs in db.Doc_Customer on od.CustomerGuid equals cs.ID into temp1
                               from cs in temp1.DefaultIfEmpty()
                               join pro in db.Doc_Proprietor on ea.ProprietorGuid equals pro.ID into temp2
                               from pro in temp2.DefaultIfEmpty()
                               where (ea.CreateTime >= StartDate && ea.CreateTime <= EndDate)
                               && ((string.IsNullOrEmpty(OrderNo)) ? true : ea.CaiGouNo.Contains(OrderNo))
                               && ((string.IsNullOrEmpty(ProprietorGuid)) ? true : ea.ProprietorGuid == ProprietorGuid)
                               && ((string.IsNullOrEmpty(KuaiDiNo)) ? true : ea.KuaiDiNo == KuaiDiNo)
                               && ((string.IsNullOrEmpty(IsDelete)) ? true : ea.IsDelete == (IsDelete == "1" ? true : false))
                               && (OrderStateNo == "3" ? true : ea.StateNo == OrderStateNo)
                               select new Doc_ExpressArriveModel
                               {
                                   CaiGouOrderNo = od.OrderNo,
                                   CreateTime = ea.CreateTime,
                                   ID = ea.ID,
                                   KuaiDiNo = ea.KuaiDiNo,
                                   CustomerName = cs.CustomerName,
                                   CustomerNo = cs.CustomerNo,
                                   KuaiDiReceiver = ea.KuaiDiReceiver,
                                   Proprietor = pro.ProprietorName,
                                   OperatorName = od.OperatorName,
                                   UpdateTime = string.IsNullOrEmpty(ea.UpdateTime) ? string.Empty : ea.UpdateTime,
                                   StateName = ea.StateNo,
                                   OrderType = od.OrderTypeNo,
                                   AddDateTime = ea.AddDateTime,
                                   KuaiDiReceiveTime = ea.KuaiDiReceiveTime,
                                   ExpressName = ea.ExpressName,
                                   PictureTag = ea.IsPicture ? "已上传" : "未上传",
                                   JianShu = ea.JianShu,
                                   Remark = ea.Remark,
                                   FileExtension = ea.FileExtension,
                                   IsPicture = ea.IsPicture,
                                   IsDelete = ea.IsDelete
                               }
                               ).ToList();

原因:string.IsNullOrEmpty(ea.UpdateTime)和string.Empty是.net后台代码的写法,在Linq to Sql的时候,镜像没法正确转换,但是三目运算是可以的,因为sql里面就可以用,所以就是sql语句不能用的,在Linq中也不能写

正确代码:

只需要把UpdateTime = string.IsNullOrEmpty(ea.UpdateTime) ? string.Empty : ea.UpdateTime,
改成UpdateTime = ea.UpdateTime==null ? "" : ea.UpdateTime,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值