我无法将以下sql复制为LINQ语句
select TableA.* from TableA left outer join TableAinTableB on TableA.Id = TableAId where TableBId is null
以下不返回任何行
from TableA in db.TableA join AinB in db.TableAinTableB on TableA.Id equals TableAId where AinB.TableBId == null select TableA
还尝试了一些其他不起作用的东西。
from TableA in db.TableA join AinB in db.TableAinTableB on TableA.Id equals TableAId where AinB == null select TableA
TableAinTableB是一个多对多的表。我想要的查询将从TableA中提取中间表中没有记录的所有记录。我的sql做我想要的但我不知道如何将它转换为LINQ to SQL。
我最后通过执行db.ExecuteQuery(“working sql”)来解决它;但我想知道LINQ中是否可以进行查询以及如何编写它,或者指向涵盖此方案的文档的指针。我的搜索没有发现我认为有用的任何东西。
答案 0 :(得分:2)
您可以使用DefaultIfEmpty来模拟外部联接。 看看这个sample。
在您的示例中,它类似于:
var q = from a in TableA
join b in TableB on a.Id equals b.Id into g
from b in g.DefaultIfEmpty()
select a;
答案 1 :(得分:1)
对于“IS NULL”尝试这样的事情
from TableA in db.TableA
join AinB in db.TableAinTableB
on TableA.Id equals TableAId
where object.Equals(AinB.TableBId, null)
select TableA;
答案 2 :(得分:0)
您也可以使用LINQ的ExecuteQuery
方法,例如:
string query = "select TableA.* from TableA left outer join TableAinTableB on TableA.Id = TableAId where TableBId is null";
TestDataContext db = new TestDataContext();
IEnumerable<TableA> objUser = db.ExecuteQuery<TableA>(query).ToList();
其中TestDataContext
是映射DataContext
的数据库的LINQ-to-SQL TableA
。