zoukankan      html  css  js  c++  java
  • linq多表查询

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Otsuka.Application.Dal;
    using Otsuka.Application.Bll.Common;
    using Otsuka.Application.Common;
    using Otsuka.Application.Bll.Dialog.ApplicationFind;
    
    namespace Otsuka.Application.Bll.Dialog.ApplicationFind
    {
        public class SearchApplicationBll : BllBaseEx
        {
            /// <summary>
            /// 要求キー-申請検索条件
            /// </summary>
            public const string REQUEST_KEY_APPLICATION_REQUEST = "APPLICATION_REQUEST";
    
            /// <summary>
            /// 返却キー-申請情報(複数件)
            /// </summary>
            public const string RESPONSE_KEY_APPLICATION_LIST = "APPLICATION_LIST";
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            protected override Dictionary<string, object> Perform()
            {
                // 検索条件の取得
                SearchApplicationRequest request = (SearchApplicationRequest)Request[REQUEST_KEY_APPLICATION_REQUEST];
    
                var query = DataContext.TBAATR_APPLICATION.AsQueryable();
                var productsQuery = DataContext.TBAATR_PRODUCT.AsQueryable();
    
                if (!CheckUtility.IsEmpty(request.ApplicationNo))
                {
                    // 申請番号
                    query = query.Where(item => item.APPLI_NO == request.ApplicationNo);
                    productsQuery = productsQuery.Where(item => item.APPLI_NO == request.ApplicationNo);
                }
    
                if (!CheckUtility.IsEmpty(request.MaterialsInfoCode))
                {
                    // 資材媒体
                    query = query.Where(item => item.MATERIALS_CODE == request.MaterialsInfoCode);
                }
    
                if (!CheckUtility.IsEmpty(request.MaterialsClassInfoCode))
                {
                    // 資材分類
                    query = query.Where(item => item.MATERIALS_CLASS_CODE == request.MaterialsClassInfoCode);
                }
    
                if (!CheckUtility.IsEmpty(request.UniformCode))
                {
                    // 統一コード
                    query = query.Where(item => item.UNIFORM_CODE == request.UniformCode);
                }
    
                if (!CheckUtility.IsEmpty(request.OrderPartCode))
                {
                    // 発注品番
                    query = query.Where(item => item.ORDER_PART_CODE == request.OrderPartCode);
                }
    
                if (!CheckUtility.IsEmpty(request.ApplicantDivisionCode))
                {
                    // 申請部署
                    query = query.Where(item => item.APPLICANT_DIVISION == request.ApplicantDivisionCode);
                }
    
                if (!CheckUtility.IsEmpty(request.ApplicantStaffCode))
                {
                    // 申請者
                    query = query.Where(item => item.APPLICANT_STF_CODE == request.ApplicantStaffCode);
                }
    
                if (!CheckUtility.IsEmpty(request.ApplicationDateStart))
                {
                    // 申請日開始
                    query = query.Where(item => item.APPLICATION_DATE.CompareTo(request.ApplicationDateStart.Replace("/", "") + "00") >= 0);
                }
    
                if (!CheckUtility.IsEmpty(request.ApplicationDateEnd))
                {
                    // 申請日終了
                    query = query.Where(item => item.APPLICATION_DATE.CompareTo(request.ApplicationDateEnd.Replace("/", "") + "99") <= 0);
                }
    
                if (!CheckUtility.IsEmpty(request.DrugCode))
                {
                    // 薬剤
                    query = query.Where(item => item.DRUG == request.DrugCode);
                }
    
                if (!CheckUtility.IsEmpty<string>(request.ProductCodes))
                {
                    // 製品
                    productsQuery = productsQuery.Where(item => request.ProductCodes.Contains(item.PROD_GRP_CODE));
                }
    
                if (!CheckUtility.IsEmpty(request.MaterialsName))
                {
                    // 資材名称
                    query = query.Where(item => item.MATERIALS_NM_KNJ.Contains(request.MaterialsName));
                }
    
                if (!CheckUtility.IsEmpty(request.Mode))
                {
                    if (request.Mode == ConstValue.APPLICATION_FIND_MODE_APPLICATION)
                    {
                        // ステータス(公開許可)
                        query = query.Where(item => item.STATUS_NO == ((int)Status.SecretariatPermitPublic).ToString());
                    }
                    else if (request.Mode == ConstValue.APPLICATION_FIND_MODE_COMMITTEE)
                    {
                        // ステータス(受理、審議Ⅰ、Ⅱ、事前審議)
                        query = query.Where(item => new[] { 
                            ((int)Status.SecretariatAccept).ToString(), 
                            ((int)Status.SecretariatAcceptDiscuss).ToString(), 
                            ((int)Status.SecretariatAcceptNoDiscuss).ToString() 
                        }.Contains(item.STATUS_NO));
                    }
                }
    
    
                //ADD:SCSK:20141128:IT指摘事項No.16:START
                string yyyymmdd = DateTime.Now.ToString("yyyyMMdd");
                //ADD:SCSK:20141128:IT指摘事項No.16:END
    
                List<SearchApplicationResult> results = (from row in query.Where(item => item.DEL_FLG == '0')
                                                         //MOD:SCSK:20141128:IT指摘事項No.16:START
                                                         //join row_temp in DataContext.TBAARS_COMMITTEE_APPLICATION.AsQueryable().Where(item => item.DEL_FLG == '0') on row.APPLI_NO equals row_temp.APPLI_NO into row_temp2
                                                         //from committeeApplication in row_temp2.DefaultIfEmpty()
                                                         //MOD:SCSK:20141128:IT指摘事項No.16:END
                                                         join products_temp in productsQuery.Where(item => item.DEL_FLG == '0') on row.APPLI_NO equals products_temp.APPLI_NO into products_temp2
                                                         from products in products_temp2.DefaultIfEmpty()
                                                         join staffs_temp in DataContext.TBCMRS_STF_INFO on row.APPLICANT_STF_CODE equals staffs_temp.STF_CODE into staffs_temp2
                                                         from staffs in staffs_temp2.DefaultIfEmpty()
                                                         join divisions_tmp in DataContext.TBCMRS_CST_INFO on row.APPLICANT_DIVISION equals divisions_tmp.CST_CODE into divisions_temp2
                                                         from divisions in divisions_temp2.DefaultIfEmpty()
                                                         join drugs_temp in DataContext.TBCMRS_DRUG_INFO.AsQueryable().Where(item => item.DEL_FLG == '0') on row.DRUG equals drugs_temp.DRUG_CODE into drugs_temp2
                                                         from drugs in drugs_temp2.DefaultIfEmpty()
                                                         join materialsInfo in DataContext.MATERIALS_INFO on row.MATERIALS_CODE equals materialsInfo.MATERIALS_CODE
                                                         join materialsClassInfo in DataContext.MATERIALS_CLASS_INFO on row.MATERIALS_CLASS_CODE equals materialsClassInfo.MATERIALS_CLASS_CODE
                                                         //join materialsattributes_temp in DataContext.MATERIALS_ATTRIBUTES.AsQueryable().Where(item => item.ABOLITION_FLG != "1") on row.MATERIALS_NO equals materialsattributes_temp.MATERIALS_NO into materialsattributes_temp2
                                                         join materialsattributes_temp in DataContext.MATERIALS_ATTRIBUTES on row.MATERIALS_NO equals materialsattributes_temp.MATERIALS_NO into materialsattributes_temp2
                                                         from materialsattributes in materialsattributes_temp2.DefaultIfEmpty()
                                                         //ADD:SCSK:20141128:IT指摘事項No.16:START
                                                         from committeeApplication in DataContext.TBAARS_COMMITTEE_APPLICATION
                                                         //ADD:SCSK:20141128:IT指摘事項No.16:END
                                                         where
                                                         materialsInfo.DEL_FLG == '0'
                                                         && materialsClassInfo.DEL_FLG == '0'
                                                         //ADD:SCSK:20141128:IT指摘事項No.16:START
                                                         && divisions.STA_YMD.CompareTo(yyyymmdd) <= 0
                                                         && divisions.END_YMD.CompareTo(yyyymmdd) >= 0
                                                         && row.APPLI_NO == committeeApplication.APPLI_NO
                                                         && row.REVISION_NO == committeeApplication.REVISION_NO
                                                         && committeeApplication.DEL_FLG == '0'
                                                         //ADD:SCSK:20141128:IT指摘事項No.16:END
                                                         select new SearchApplicationResult()
                                                         {
                                                             ApplicationNo = row.APPLI_NO,
                                                             ApplicantDivisionName = divisions.SCN_NM_KNJ,
                                                             ApplicantStaffName = staffs.STF_NM_KNJ,
                                                             ApplicationDate = row.APPLICATION_DATE,
                                                             DrugName = drugs.DRUG_NM_KNJ,
                                                             MaterialsInfoName = materialsInfo.MATERIALS_NM_KNJ,
                                                             MaterialsClassInfoName = materialsClassInfo.MATERIALS_CLASS_NM_KNJ,
                                                             MaterialsName = row.MATERIALS_NM_KNJ,
                                                             DiscussionClassName = row.DISCUSSION_CLASS.ToString(),
                                                             UniformCode = row.UNIFORM_CODE,
                                                             OrderPartCode = row.ORDER_PART_CODE,
                                                             CommitteeNo = committeeApplication.COMMITTEE_NO,
                                                             CommitteeDelFlg = committeeApplication.DEL_FLG,
                                                             StaffStaYmd = divisions.STA_YMD,
                                                             StaffEndYmd = divisions.END_YMD,
                                                             ApplicationDivRegDate = row.APPLICANT_DIV_REG_DATE,
                                                             AbolitionFlg = materialsattributes.ABOLITION_FLG,
                                                             //ADD:SCSK:20141028:2-3:START
                                                             PurposeBackground = row.PURPOSE_BACKGROUND
                                                             //ADD:SCSK:20141028:2-3:END
                                                         }).Distinct().ToList<SearchApplicationResult>();
    
                List<SearchApplicationResult> searchResults = new List<SearchApplicationResult>();
    
                foreach (SearchApplicationResult result in results)
                {
                    if (((result.CommitteeNo != null && result.CommitteeDelFlg == '0') && !request.IsContainSettedCommittee) || result.AbolitionFlg == "1")
                    {
                        // 委員会設定済み申請を検索に含めないときで、委員会番号がnull のとき
                        continue;
                    }
    
                    if (CheckUtility.IsEmpty(result.ApplicantStaffName)
                        || (!CheckUtility.IsEmpty(result.StaffStaYmd)
                        && (result.StaffStaYmd.CompareTo(result.ApplicationDivRegDate) <= 0
                        && result.StaffEndYmd.CompareTo(result.ApplicationDivRegDate) >= 0)))
                    {
                        // 申請者が空文字、もしくは有効な申請者が存在する
                        result.DiscussionClassName = this.GetDiscussionClassName(result.DiscussionClassName);
                        searchResults.Add(result);
                    }
                }
    
                Dictionary<string, object> response = new Dictionary<string, object>();
                response.Add(RESPONSE_KEY_APPLICATION_LIST, searchResults);
    
                return response;
            }
    
            /// <summary>
            /// 審議種別コードから審議種別名を朱得する
            /// </summary>
            /// <param name="discussionClassCode"></param>
            /// <returns></returns>
            private string GetDiscussionClassName(string discussionClassCode)
            {
                if (discussionClassCode == "1")
                {
                    return "審議Ⅰ";
                }
                else if (discussionClassCode == "2")
                {
                    return "審議Ⅱ";
                }
                else if (discussionClassCode == "3")
                {
                    return "事前審議";
                }
                else if (discussionClassCode == "0")
                {
                    return "未判定";
                }
    
                return string.Empty;
            }
        }
    }
    View Code
  • 相关阅读:
    波段是金牢记六大诀窍
    zk kafka mariadb scala flink integration
    Oracle 体系结构详解
    图解 Database Buffer Cache 内部原理(二)
    SQL Server 字符集介绍及修改方法演示
    SQL Server 2012 备份与还原详解
    SQL Server 2012 查询数据库中所有表的名称和行数
    SQL Server 2012 查询数据库中表格主键信息
    SQL Server 2012 查询数据库中所有表的索引信息
    图解 Database Buffer Cache 内部原理(一)
  • 原文地址:https://www.cnblogs.com/haiy/p/4145905.html
Copyright © 2011-2022 走看看