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();

 

posted @ 2015-12-15 16:20  江境纣州  阅读(19)  评论(0编辑  收藏  举报