2012-02-14 98 views
2

假设我有表A有很多表B的。表B只有一个表A.如何过滤linq中的一个集合集合?

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

获取所有表A的其中表B有名称==“鲍勃”,然后让所有表B的内表A.

Table B 
Name TableA_Id 
bob 1 
bob 1 
bob 1 
jim 1 
jon 2 

所以,如果我想查询我想一个表一个包含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 

我都做不到这些,因为它要么不编译或返回到许多表A(我认为)是什么给了我意想不到的效果。

+0

我只用EF而不是NHibernate的,所以我不会张贴此作为一个答案,因为它是一个猜测,但你可以这样做:'.Query ( ).Where(a => a.TableB.Any(b => b.Name ==“bob”))'? – Ocelot20 2012-02-14 18:46:13

+0

嗯,这似乎工作(仍然有更多的测试)。也许我误解了任何我检查它,并认为如果一个结果会被发现,一切都会回来。 – chobo2 2012-02-14 18:50:57

+0

没错 - 如果找到一个结果(这个特定的A有任何TableB.Name ==“bob”),它将被包括在内。没有名称为“bob”的任何TableB的所有A都将被丢弃。 – 2012-02-14 19:13:35

回答

2

我相信你能做到:

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