Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按另一个表的FK筛选记录_C#_.net_Linq_Tsql_Linq To Sql - Fatal编程技术网

C# 按另一个表的FK筛选记录

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中,我

如何过滤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中,我可以进行左连接,并在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);