实体框架:从ID不在的地方选择

时间:2018-03-11 14:40:41

标签: c# asp.net sql-server entity-framework

我知道这可能是一个简单的问题,但我花了好几个小时试图找出它没有运气!

我想在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;

它在小型数据库中运行良好,但在生产数据库中,它需要永远,然后超时!

感谢任何帮助!

2 个答案:

答案 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;