以下 SQL 查询的等效 LINQ 查询是什么:
Select Id, Name
From Table1 tbl1
Where Id in ( Select Id From Table2)
以下 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
。使用下一个查询来避免这个问题,缺点:它将所有 id 从 Table2 加载到内存中,优点:更省时。检查费利佩斯的答案,这也很好,但在评论部分讨论了它自己的缺点。
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();