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 函数是一个好主意,但是,由于我正在查看一组结果,然后根据我在其他响应中看到的结果,当人们调用 .Contains 时,LINQ 不喜欢它收藏。

我试图从整体上了解 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

You're looking for the .Contains() function.

  1. First build up the inner filter set section of the query.

    E.G.: The part that goes in the .Contains() (in SQL terms the "ps.JobNumber IN (...)" )

  2. Filter your query by the new data subset by using the .Contains function.

Example:

C# SQL-like syntax:

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

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

LINQ chaining:

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

You can create subselect's in 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 回答