C# 具有内部select的LINQ Having子句

C# 具有内部select的LINQ Having子句,c#,linq-to-entities,C#,Linq To Entities,如何将以下内容转换为LINQ-EF select Name from TableA as TableAOuter group by TableAOuter.Name, TableAOuter.Id having( select count(TableAInner.Id) from TableA as TableAInner where TAbleAInner.Reference=TableAOuter.Id) = 0 ); 对我来说,这看起来像: var query =

如何将以下内容转换为
LINQ
-
EF

select Name
from TableA as TableAOuter
group by TableAOuter.Name, TableAOuter.Id
having(
    select count(TableAInner.Id)
    from TableA as TableAInner
    where TAbleAInner.Reference=TableAOuter.Id) = 0
);

对我来说,这看起来像:

var query = from row in tableOuter
            group row by new { row.Name, row.Id } into g
            where !tableInner.Any(inner => inner.Reference == g.Key.Id)
            select g.Key.Name;
虽然我很想在分组之前执行过滤,但此时您可以只对行名称进行分组:

var query = from row in tableOuter
            where !tableInner.Any(row => inner.Reference == row.Id)
            group row.Name by new { row.Name, row.Id };

我认为这应该做同样的事情,对吗?

应该是
!tableInner.Any(inner=>inner.Reference==row.Id)
grouprow.Name by new
?哎哟-我在这两种情况下都是指“grouprow by”。在第一个版本中,不能在where子句中使用
row.Id
,因为它不在范围内。修正了这两个问题,简化了后一种方法。