6

私はLINQに変換しようとしている次のTransact-Sqlを持っています...そして苦労しています。

SELECT * FROM Project
WHERE Project.ProjectId IN (SELECT ProjectId FROM ProjectMember Where MemberId = 'a45bd16d-9be0-421b-b5bf-143d334c8155')

どんな助けでも大歓迎です...可能であれば、ラムダ式でやりたいです。

前もって感謝します!

4

4 に答える 4

6

GFrizzleは私を打ち負かしました。しかし、ここにC#バージョンがあります

var projectsMemberWorkedOn = from p in Projects
                    join projectMember in ProjectMembers on
                        p.ProjectId equals projectMember.ProjectId
                    where projectMember.MemberId == "a45bd16d-9be0-421b-b5bf-143d334c8155"
                    select p;

おまけとして、純粋な LINQ メソッド チェーン バージョンも追加されました。

var projectsMemberWorkedOn =
            Projects.Join( ProjectMembers, p => p.ProjectId, projectMember => projectMember.ProjectId,
                ( p, projectMember ) => new { p, projectMember } )
                .Where( @t => @t.projectMember.MemberId == "a45bd16d-9be0-421b-b5bf-143d334c8155" )
                .Select(@t => @t.p );
于 2008-12-09T05:43:10.837 に答える
5

このコンテキストでは、次のように .Contains() を使用できます。

var projects = 
from p in db.Projects
where db.ProjectMembers.Where(m => m.MemberId == "a45bd16d-9be0-421b-b5bf-143d334c8155").Select(pp => pp.ProjectID).Contains(p.ProjectID)
select p;
于 2008-12-09T05:11:50.153 に答える
4

ラムダは必要ありません。単純な LINQ 結合がここにあります。

From p in db.Projects _
Join m in db.ProjectMember On p.ProjectId Equals m.ProjectId _
Where m.MemberId = "a45bd16d-9be0-421b-b5bf-143d334c8155" _
Select p
于 2008-12-09T05:36:01.040 に答える
3

おそらくAny()演算子が必要です。

var q = db.Projects
          .Where(p => db.ProjectMembers
                        .Where(pm => pm.MemberId == memberId)
                        .Any  (pm => p.ProjectId == pm.ProjectId)); 

の結果セットdb.ProjectMembers.Where(...)は常に同じであるため、一度だけ実行されるように分割できます。

var projectMembers = db.ProjectMembers.Where(pm => pm.MemberId == memberId);
var q              = db.Projects
                       .Where(p  => projectMembers
                                    .Any(pm => p.ProjectId == pm.ProjectId));
于 2008-12-09T05:52:39.227 に答える