如何在linq中过滤集合的集合?

时间:2012-02-14 18:40:34

标签: c# .net linq nhibernate

假设我有表A有很多表B.表B只有一个表A.

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

获取表B具有名称==“bob”的所有表A,然后获得表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 

我不能做其中任何一个,因为它要么不编译,要么它返回到许多TableA(我认为)是什么给了我意想不到的结果。

1 个答案:

答案 0 :(得分:2)

我相信你可以做到:

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