使用 GroupJoin 左连接 和 Join 内连接
GroupJoin 链接,需要SelectMany 查询一下,否则会报错, GroupJoin 如果被链接的表不匹配仍然显示左表的数量,Join 只显示两个表匹配成功的数量
Lambda 表达式写法:
var result = _context.Set<SiteErrorCode>().GroupJoin(_context.Set<Languages>(), u => u.LanguageId, lang => lang.Id, (u, lang) => new { u, lang })
.SelectMany(e => e.lang.DefaultIfEmpty(), (e,lang) => new SiteErrorCodeDto
{
Id = e.u.Id,
Title = e.u.Title,
CallIndex = e.u.CallIndex,
SortId = e.u.SortId,
Description = e.u.Description,
JsonData = e.u.JsonData,
LanguageId = e.u.LanguageId,
Language = lang.Title,
}).Where(funcWhere).OrderByBatch(orderBy);
查询表达式写法, join 和 left join 的区别在于,left join 多了一句
into d_join from t_d in d_join.DefaultIfEmpty()
示例:
var result = from ms in _context.Set<MembersContractReceiptHistory>()
join mc in _context.Set<MembersContract>() on ms.ContractId equals mc.Id into mc_join
from t_mc in mc_join.DefaultIfEmpty()
join d in _context.Set<Dictionaries>() on ms.Mode equals d.Id into d_join
from t_d in d_join.DefaultIfEmpty()
select new MembersContractReceiptHistoryDto()
{
Amount = ms.Amount,
ContractId = ms.ContractId,
Mode = ms.Mode,
ModeName = t_d.Title,
Contract = ms.Contract,
ContractNo = t_mc.ContractNo,
Id = ms.Id,
MemberId = t_mc.MemberId,
ReceiptNo = ms.ReceiptNo,
ReceiptTime = ms.ReceiptTime,
Remark = ms.Remark,
};