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 ?? "")
};