在“选择语句”中选择

本文关键字:选择 选择语句 语句 | 更新日期: 2023-09-27 18:31:03

什么是与以下SQL查询等效的LINQ查询:

Select Id, Name
From Table1 tbl1
Where Id in ( Select Id From Table2)

在“选择语句”中选择

您基本上描述了一个内部连接,其中包含从一个表中选择的行:

var result = from t1 in Table1
             join t2 in Table2
             on t1.Id equals t2.Id
             select new{t1.Id, t1.Name};

下一个 SQL 语句将使用 EF 和 MS SQL 生成:

SELECT t1.Id, t1.Name
FROM Table1 AS t1
INNER JOIN Table2 AS t2 ON t1.Id = t2.Id

请注意,如果要从 Table2 中选择非唯一项,则result中可能会有重复项。使用下一个查询来避免此问题,缺点:它将 Table2 中的所有 id 加载到内存中,优点:更省时。查看费利佩斯的答案,这也相当不错,但在评论部分讨论了它自己的缺点。

var table2Ids = new HashSet<int>(context.Table2.Select(t2 => t2.Id));
var result = context.Table1
                    .Where(t => table2Ids.Contains(t.Id))
                    .Select(t => new{t.Id, t.Name});

尝试使用 Contains 方法:

var query = from c in db.Table1
            where db.Table2.Select(x => x.Id).Contains(c.Id)
            select new { c.Id, c.Name };
var result = query.ToList();