Linq 踩坑备忘

0 篇文章 0 订阅

1、错误提示:提示无法引用函数 string.IsNullOrWhiteSpace 

错误写法:

qry = qry.Where(x => !string.IsNullOrWhiteSpace(x.conclude_by) && !string.IsNullOrWhiteSpace(x.conclude_opinion) );

修正写法:
qry = qry.Where(x => !(x.conclude_by == null || x.conclude_by.Trim() == string.Empty) && !(x.conclude_opinion == null || x.conclude_opinion == string.Empty));

 

2、错误提示:指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。

由于是分库导致跨库查询,跨库以后有可能就跨服务器所以。。。 。。。

错误写法:

var test = from q in _deviceRepository.DeviceRepair.AsNoTracking()
                       join d in _mesRepository.DeviceDef.AsNoTracking() on q.device equals d.device_code
                       select new {
                           q,
                           d.product_name
                       };

修正写法:

bug:该写法对于数据量小的影响不大,对于数据量大的表将数据载入内存中将对性能有所损失

var deviceDefine = _mesRepository.DeviceDefine.AsNoTracking().ToList();
var deviceRepair = _deviceRepository.DeviceRepairJob.AsNoTracking().ToList();

var test = from q in deviceRepair
                       join d in deviceDefine
                       on q.device equals d.device_code
                       select new {
                           q,
                           d.product_name
                       };

方案2:在数据库建视图或存储过程解决数据查询问题,但这个貌似不清真。。。 。。。 

方案3:待研究。。。 。。。

3、一个是IEnumerable 一个是 IQueryable 写在同一条ling中 会报错:此上下文仅支持基元类型或枚举类型。   

  暂时解决方式:IEnumerable放在前,IQueryable放在后就不会报错,原由待更新

4、left join 时   当右表是空的要进行空引用处理,否则会提示空引用的异常

LINQ LEFT JOIN 写法:

var materialInfo = from q in deviceProductName
                               join m in _deviceRepository.DeviceJobUsedKits.AsNoTracking()
                               on new { job_id = q.q.id, job_from = 2 } equals new { m.job_id, m.job_from }
                               into mgroup
                               from mg in mgroup.DefaultIfEmpty()
                               select new {
                                   q.q,
                                   q.q.repair_by_name,
                                   q.product_name,
                                   material_code = mg == null ? string.Empty :( mg.material_code ?? ""),
                                   material_name = mg == null ? string.Empty : ( mg.material_name ?? ""),
                                   specification = mg == null ? string.Empty : ( mg.specification ?? "")
                               };

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值