什么是lambda等价的SQL" in"声明?

时间:2014-12-15 08:55:22

标签: c# sql lambda

我无法弄清楚这个sql语句的lambda等价物:

select * from Document
where Document.OrginalDocumentNumber
      in (select documentAccess.DocumentId from documentAccess where userId='1')

问题是文件& documentaccess表彼此没有关系。
任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:3)

将EX替换为EXISTS,您将获得以下信息:

from d in dbContext.Documents 
where dbContext.documentAccesses.Any(
    x=>x.DocumentId == d.OrginalDocumentNumber && x.userId == '1' )
select d

答案 1 :(得分:0)

通常情况下,如果您有合理的导航属性,则可以直接避免join或子查询:

var documents = from documentAccess in contex.DocumentAccesses
                where documentAccess.UserId == 1
                select documentAccess.Document;

您可能希望在结果上使用.Distinct(),具体取决于您的数据。

类似地:

var documents = contex.DocumentAccesses
                      .Where(access => access.UserId == 1)
                      .Select(access => access.Document);

更好的是,如果你已经在上下文中有User

var documents = currentUser.DocumentAccesses.Select(access => access.Document);