2016-03-31 8 views
3

このようにクエリを作成できますか?C#Linq Join Equals Where

var result = from us20 in Us20Repository.GetAll() 
      join pj01 in Pj01Repository.GetAll() on new 
      { 
       User = 
        (us20.company == "kodofisi" ? 
         us20.personalId : 
         (
          us20.company == "coca-cola" ? 
          (
           (from pj02 in Pj02Repository.GetAll() 
           where 
            pj02.id == us20.id && 
            pj02.personalId == us20.personalId 
           select new 
           { 
            pj02.id 
           }).First().ToString() 
          ) : 
          "" 
         ) 
        ), 
       ACTIVE = "X" 
      } equals new { User = pj01.name, ACTIVE = pj01.active } 
      select new 
      { 
       Name = pj01.id 
      }; 

これはジョインでは機能しません。それ以外の方法は選択を使用して行うことができますか?データが来ない。

対応するクエリは、それが動作です:

 
/*bla bla*/ FROM us20 US20 
INNER JOIN pj01 PJ01 ON PJ01.PJID = 
( 
    CASE WHEN (US20.company = "kodofisi") 
    THEN 
     US20.personalId 
    WHEN 
     (US20.BKNM = "coca-cola") 
    THEN 
     (
      SELECT dataId FROM pj02 WHERE id = US20.id AND personalId = US20.personalId 
     ) END 
) AND PJ01.active = "X" 

答えて

0

これが問題を引き起こしているものであれば、私は知らないが、多分あなたはFirstOrDefaultを(使用するように試みることができる)の代わりにスニペット上の第一()の:

(from pj02 in Pj02Repository.GetAll() 
          where 
           pj02.id == us20.id && 
           pj02.personalId == us20.personalId 
          select new 
          { 
           pj02.id 
          }).First().ToString() 

このような変更は、私が持っていた同様の問題を解決しました。