我知道这可能是一个简单的问题,但我花了好几个小时试图找出它没有运气!
我想在Entity Framework中实现以下SQL命令:
SELECT * FROM Table1
WHERE RowID NOT IN (
SELECT SomeID FROM Table2 Where SomeID is not null)
我尝试了以下(Asp.Net C#):
var SomeIDs = db.Table2.Where(n => n.SomeID != null).Select(x => x.SomeID);
var query = (from a in db.Table1
where !(SomeIDs.Contains(a.RowID))
select a;
它在小型数据库中运行良好,但在生产数据库中,它需要永远,然后超时!
感谢任何帮助!
答案 0 :(得分:2)
尝试使用AsNoTracking
,如果您没有使用返回的对象更新数据库中的数据,它可能会有所帮助
Table1.where(x => !someIds.conatins(x.id)).AsNoTracking();
答案 1 :(得分:1)
您是否尝试过使用.DefaultIfEmpty(),as per this question。
var query = from a in db.Table1
join b in SomeIDs
on a.RowID equals b.SomeID into c
from b in c.DefaultIfEmpty()
where b == null
select a;