繁体   English   中英

使用与LINQ的SQL IN函数等效的集合

[英]Using the equivalent to the SQL IN function with LINQ with a collection

如何在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 on a采集。

我试图从整体上理解LINQ的工作原理。 我相对缺乏经验。 任何建议将不胜感激。

编辑:我已经看到了一些方法,我想知道以下是一个良好的开端还是最好使用连接的链接查询实现?

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;

我知道这是不完整的,没有任何目的或对我试图实现的目标毫无意义。 这仅仅是基于我以前发过的帖子的一个例子,并且想知道这种方法是否合适。

谢谢!

你正在寻找.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();

您可以在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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM