C# 如何在linq中筛选集合的集合?

C# 如何在linq中筛选集合的集合?,c#,.net,linq,nhibernate,C#,.net,Linq,Nhibernate,假设我有一个表A,其中有许多表B。表B只有一个表A 现在假设表B有一个名为Name的属性。如何在linq中执行以下操作 获取所有表A,其中表B的名称==“bob”,然后获取表A中的所有表B 范例 Table B Name TableA_Id bob 1 bob 1 bob 1 jim 1 jon 2 因此,如果我要查询,我希望返回一个表a对象,其中包含3个表B对象 我试过了 session.Query<TableB>().where(x =>

假设我有一个表A,其中有许多表B。表B只有一个表A

现在假设表B有一个名为Name的属性。如何在linq中执行以下操作

获取所有表A,其中表B的名称==“bob”,然后获取表A中的所有表B

范例

Table B
Name   TableA_Id
bob    1
bob    1
bob    1
jim    1
jon    2
因此,如果我要查询,我希望返回一个表a对象,其中包含3个表B对象

我试过了

session.Query<TableB>().where(x => x.Name == "bob").select(x => x.TableA)

session.Query<TableA>().where(x => x.TableB.where(d => d.Name == "bob") // can't do this since it is a collection 
session.Query()。其中(x=>x.Name==“bob”)。选择(x=>x.TableA)
session.Query().where(x=>x.TableB.where(d=>d.Name==“bob”)//无法执行此操作,因为它是一个集合
我无法执行这两项操作,因为它要么无法编译,要么返回到许多表中(我认为),这给了我意想不到的结果。

我相信您可以做到:

var tableBs = session.Query<TableA>()
                     .Where(a => a.TableBs.Any(b => b.Name == "bob"))
                     .SelectMany(a => a.TableBs);
var tableBs=session.Query()
.Where(a=>a.TableBs.Any(b=>b.Name==“bob”))
.SelectMany(a=>a.TableBs);

我只使用了EF,没有使用nhibernate,所以我不会把它作为一个答案,因为这是一个猜测,但你可以这样做:
.Query().Where(a=>a.TableB.Any(b=>b.Name==“bob”)
?嗯,这似乎很有效(还需要进一步测试)。可能我误解了任何结果,因为我检查了它,并认为如果找到一个结果,一切都会回来。没错,如果找到一个结果(这个特定的A有任何TableB.Name==“bob”),它将被包括在内。所有没有名为“bob”的TableB的A都将被丢弃。