2

LINQで以下を翻訳するにはどうすればよいですか?

SELECT DISTINCT w.Worker_ID, w.Surname, w.FirstName, ps.JobNumber
FROM Worker w, ProjectSignatory ps
where w.Worker_ID = ps.Worker_ID
and ps.JobNumber 
IN 
    (SELECT DISTINCT pa.JobNumber
    FROM Worker w, PAAFRegister pa
    where w.Worker_ID = pa.Worker_ID
    and w.Worker_ID = @UserX)

.Contains関数が良いアイデアであることを示唆する投稿をいくつか見てきましたが、結果のコレクションを調べているので、他の応答で見たものに基づいて、LINQは人々が.Containsを呼び出すときにそれを好きではありませんコレクション。

LINQの仕組みを全体的に理解しようとしています。私は比較的経験が浅いです。アドバイスをいただければ幸いです。

編集:私はいくつかのアプローチを見てきましたが、次のことが良いスタートであるか、それとも結合を使用したlingeクエリを使用して最もよく達成されるのでしょうか?

var sig = from w in db.Workers
          join ps in db.ProjectSignatories
              on w.Worker_ID equals ps.Worker_ID
          select ps;

var paaf = from w in db.Workers
           join pa in db.PAAFRegisters
               on w.Worker_ID equals pa.Worker_ID
           where w.Worker_ID == workerID
           select w;

私はこれが不完全であり、私が達成しようとしていることに目的がないか、意味がないことを認識しています。これは、私が見た以前の投稿に基づいた単なる例であり、アプローチが適切かどうか疑問に思っています。

ありがとう!

4

2 に答える 2

5

あなたはその機能を探してい.Contains()ます。

  1. まず、クエリの内部フィルター セット セクションを作成します。

    EG: .Contains()(SQL 用語では " ps.JobNumber IN (...)" )に入る部分

  2. 関数を使用して、新しいデータ サブセットでクエリをフィルター処理します.Contains

例:

C# SQL に似た構文:

var subSet = select JobNumber 
               from Workers 
              where Worker_ID == "UserX";

var result = select JobNumber 
               from Workers 
              where subSet.Contains(jobnumber);

LINQ チェーン:

var subSet = Workers.Where(o => o.Worker_ID == "UserX")
                    .Select(o => o.JobNumber)
                    .Distinct();

var result = Workers.Where(o => subSet.Contains(o.JobNumber)).ToList();
于 2012-07-05T11:39:21.217 に答える
3

LINQで副選択を作成できます。

var jobNumbers = select JobNumber from Workers where <your criteria, joins>
var myResult = select JobNumber from Workers where <your criteria, joins> and jobNumbers.Contains(JobNumber)
于 2012-07-05T11:41:13.980 に答える