簡體   English   中英

如何使用LINQ擴展方法創建多個聯接?

[英]How do I create multiple joins using LINQ extension methods?

我在使用帶有多個聯接的LINQ方法調用時遇到麻煩。 我正在嘗試做這樣的事情:

            if (!isDepSelect)
            {                
                query = (from Items in db.DEPARTMENTs
                             select Items);
            }
            else
            {                    
                    query = (from Items in db.DEPARTMENTs
                             from gDept in db.DEPT_PROFILE
                             from wAccess in db.WEB_ACCESS
                             where Items.DEPT_CODE == gDept.DEPT_CODE && gDept.USER_ID == wAccess.USER_ID && wAccess.EMP_ID == id
                             select Items);
            }

我這樣做了:

IQueryable<DEPARTMENT> query = db.DEPARTMENTs;


            if (isDepSelect)
            { 
                query = query.Join(db.DEPT_PROFILE,depts => depts.DEPT_CODE,prof => prof.DEPT_CODE,(depts, prof) => depts);    
            }

但是現在我不知道如何將DEPT_PROFILE表的JOIN與WEB_ACCESS表以及EMP_ID = id的條件相加。

我這樣做的原因是isDepSelect布爾值不是此查詢將更改其關系的唯一條件,並且我需要以某種方式添加此關系,而不必為每個條件都重復LINQ。

感謝您的時間。

試試看,

List<DEPARTMENTs> list =   db.DEPARTMENTs.Join(db.DEPT_PROFILE, dept => dept.DEPT_CODE, prof => prof.DEPT_CODE, (dept,prof) => new {dept, prof})
            .Join(Wdb.WEB_ACCESS, depts => depts.prof.USER_ID,web => web.USER_ID,(depts,web) => new { depts, web})
            .Where(result => result.web.EMP_ID== id).Select(s => s.depts.dept).ToList<DEPARTMENTs>();

如果您有關聯設置,則可以在完全不添加任何代碼的情況下執行此操作:

query = db.DEPARTMENTs
           .Any(item => item.DEPT_PROFILEs
                .Any(gDept => gDept.WEB_ACCESSs
                     .Any(wAccess => wAccess.EMP_ID == id)));

當然,這是假設圖中每個對象之間的關系為1-m。 如果需要,在圖中有1-0..1的關系時,可以消除某些Any方法。

您應該使用equals運算符...

query = from Items in db.DEPARTMENTs
                             from gDept in db.DEPT_PROFILE
                             join wAccess in db.WEB_ACCESS on 
gDept.DEPT_CODE equals Items.DEPT_CODE
                             select Items;

多數民眾贊成在只是示例查詢的摘要,但您可以看到我如何使用聯接運算符引入第二個表和等於運算符來聲明聯接列。

這應該工作:

    query = (from Items in db.DEPARTMENTs 
             join gDept in db.DEPT_PROFILE 
                on Items.DEPT_CODE equals gDept.DEPT_CODE
             join wAccess in db.WEB_ACCESS
                on gDept.USER_ID equals wAccess.USER_ID
             where  wAccess.EMP_ID == id
             select Items);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM