背景 给出3个表
results contains 2 columns vId and pId
vTable contains 2 columns vId and data
pTable contains 2 columns pId and data
我想使用QueryOver
完成这种SQL查询SELECT v.data, p.data
from results r
inner join vTable v on r.vId = v.vId
inner join pTable p on r.pId = p.pId
我尝试了以下内容:
var res = GetResults(some parameters)
.Select(x => x.vId
.Select(x => x.pID);
var dataset = session.QueryOver<vTable>()
.WithSubquery.WhereProperty(v => v.vId).In(res)
.Select(v => v.vId)
.Select(v => v.data)
可以很好地从vTable
获取数据然而,当我添加第二个表
时var dataset = session.QueryOver<vTable>()
.WithSubquery.WhereProperty(v => v.vId).In(res)
.JoinQueryOver<pTable>(p => p.pId)
.WithSubquery.WhereProperty(p => p.pId).In(res)
.Select(v => v.vId)
.Select(v => v.data)
.Select(p => p.pId)
.Select(p => p.data)
我收到错误
Delegate 'System.Func<System.Collections.Generic.IEnumerable<pTable>>' does not take 1 arguments
我做错了什么?
答案 0 :(得分:2)
.JoinQueryOver<pTable>(p => p.pId)
必须指向映射的实体或集合而不是id,如果你不能在hbm中映射它。并且JoinQueryOver将返回pTables而不是vTables,如果你想将返回类型保留为vTable列表,你可能想要使用JoinAlias,但如果你想要的只是投影,请确保添加别名QueryOver和JoinQueryOver调用