C# 按另一个表的FK筛选记录
如何过滤Linq to SQL查询,使其仅显示未通过FK在另一个表中引用的记录 例如,我有两张桌子:TableA和TableB。TableB有一个FK引用TableA。我想从TableA中选择所有在TableB中没有引用它的记录的行 在原始T-SQL中,我可以执行以下操作:C# 按另一个表的FK筛选记录,c#,.net,linq,tsql,linq-to-sql,C#,.net,Linq,Tsql,Linq To Sql,如何过滤Linq to SQL查询,使其仅显示未通过FK在另一个表中引用的记录 例如,我有两张桌子:TableA和TableB。TableB有一个FK引用TableA。我想从TableA中选择所有在TableB中没有引用它的记录的行 在原始T-SQL中,我可以执行以下操作: SELECT * FROM TableA WHERE NOT EXISTS (SELECT * FROM TableB WHERE TableA._id = TableB.fk_tablea_id) 在原始MySQL中,我
SELECT * FROM TableA
WHERE NOT EXISTS (SELECT * FROM TableB WHERE TableA._id = TableB.fk_tablea_id)
在原始MySQL中,我可以进行左连接,并在where子句中使用ISNULL函数
我不确定使用LINQ to SQL执行此操作的最佳方法。您可以执行以下操作:
var ctx = new Context();
var rowAs = from TableA in ctx.TableAs
where TableA.TableB.Count() > 0
select TableA;
试试这个
var result = from A in dbcontext.TableAs
Where A.TableB == null
select A;
我想您正在寻找除此之外的操作员:
如果您有映射属性,例如EntitySet或EntityRef,请在实体表A中区别为一对多或一对一关系,以便执行下一步: 对于EntitySet:
var tableAWithoutRelations= (from aRecord in TableAList where aRecord.TableB.Count()==0 select aRecord);
对于EntityRef:
var tableAWithoutRelations= (from aRecord in TableAList where aRecord.TableB==null select aRecord);
检查与我需要的相反的类似问题。TableA没有引用TableB,但我从TableA中进行选择。事实上,TableA实际上是其他连接的结果-我在帖子中的示例只是保持测试用例的简单。我道歉!我误解了你的意思。Intellisense确实从TableA中弹出了对TableB的引用,即使TableA中实际上不存在显式FK字段。但是,它似乎没有返回任何结果。这非常有效-谢谢!:我只需要将>0改为==。
var tableAWithoutRelations= (from aRecord in TableAList where aRecord.TableB==null select aRecord);