1

複数の結合で 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 を繰り返さずに、何らかの方法でこの関係を追加する必要があります。

お時間をいただきありがとうございます。

4

4 に答える 4

3

で試してみてください、

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>();
于 2012-09-14T19:00:38.717 に答える
0

関連付けが設定されている場合は、コードに結合をまったく使用せずにこれを行うことができます。

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 メソッドの一部を削除できます。

于 2012-09-14T19:42:23.250 に答える
-1

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;

これはクエリ例のほんの一部ですが、結合演算子を使用して2番目のテーブルを導入し、equals演算子を使用して結合列を宣言する方法を確認できます。

于 2012-09-14T18:16:00.050 に答える
-1

これはうまくいくはずです:

    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);
于 2012-09-18T14:59:54.080 に答える