IEnumerable.GroupJoin左外连接
首先要记一下的是Lambda返回形式有两种:
1、defaultAlgorithms.OrderBy(p => p.ItemName);
2、defaultAlgorithms.OrderBy(p => { return p.ItemName; });
一般有复杂语句的话,则用大括号。
=================================================
大致要实现如下sql:select ISNULL(A.x,B.x) from A left join B on A.y = B.y
下面直接copy代码:
var defaultAlgorithms = GetDefaultAlgorithmList(insuranceInstitutionEntity.InsuranceInstitutionID); // 主表 var algorithms = base.GetEntities<AccountAlgorithmEntity>(p => p.AccountID == accountID); // 附表 return defaultAlgorithms.GroupJoin(algorithms, defaultAlg => defaultAlg.ItemName, alg => alg.ItemName, (defaultAlg, alg) => { bool isExist = false; AccountAlgorithmEntity account = null; if (alg == null || alg.ToArray().Length <= 0) { isExist = false; } else { isExist = true; account = alg.ToArray()[0]; } return new AlgorithmEntityExtend { InsuranceStandardID = defaultAlg.InsuranceStandardID, ItemName = defaultAlg.ItemName, IsOption = defaultAlg.IsOption, EnterpriseFormula = defaultAlg.EnterpriseFormula, EnterprisePercentage = isExist ? account.EnterprisePercentage : defaultAlg.EnterprisePercentage, EnterpriseAmount = isExist ? account.EnterpriseAmount : defaultAlg.EnterpriseAmount, EnterprisePercentageMax = defaultAlg.EnterprisePercentageMax, EnterprisePercentageMin = defaultAlg.EnterprisePercentageMin, EnterprisePercentageIncrement = defaultAlg.EnterprisePercentageIncrement, PersonalFormula = defaultAlg.PersonalFormula, PersonalPercentage = isExist ? account.PersonalPercentage : defaultAlg.PersonalPercentage, PersonalAmount = isExist ? account.PersonalAmount : defaultAlg.PersonalAmount, PersonalPercentageMax = defaultAlg.PersonalPercentageMax, PersonalPercentageMin = defaultAlg.PersonalPercentageMin, PersonalPercentageIncrement = defaultAlg.PersonalPercentageIncrement }; }).OrderBy(p => p.ItemName).OrderBy(p => p.InsuranceStandardID).ToArray();