【发布时间】:2017-03-11 12:46:31
【问题描述】:
我有一个 SQL 查询,我正在尝试将其转换为 Nhibernate 查询并运行它。
SQL 查询
SELECT
A.*
FROM
TestTable i
LEFT JOIN
TestTable o
ON
i.testColumn=o.testcolumn and i.testColumn1='TestColumn1'
WHERE o.StartDate <= '2016-10-28' and i.testColumn2 > 3
休眠查询
ObjectA 是 C# 对象版本的 TestTable
ObjectA o = null;
ObjectA i = null;
var query = Session.QueryOver(() => o)
.Left.JoinQueryOver(() => i)
.Where(() => o.testColumn == i.testColumn)
.Where(() => i.testColumn1 == "TestColumn1")
.Where(() => i.testColumn2 == 3
.Where(() => o.StartDate <= '2016-10-28')
return query.Take(100).List();
映射
public ObjectATableMap : ClassMap<ObjectA>
{
Schema("[Test]");
Table("[TestTable]");
Id(x => x.Id, "Id").GeneratedBy.Native();
Map(x => x.TestColumn1, "TestColumn1");
Map(x => x.TestColumn2, "TestColumn2");
Map(x => x.StartDate ,"StartDate");
}
当我运行上述查询时,我收到以下消息 “无法解析属性:i of:ObjectA” 谁能给我提供正确的休眠查询。 谢谢
【问题讨论】:
-
JoinQueryOver需要一个具有关系的属性的表达式。你可以在这里看到一个例子stackoverflow.com/a/5420791/1486443 -
@RadimKohler 映射已显示
-
@Najera 我会看看谢谢
-
@Sike12 我试图在答案中解释这个问题。因为我期望这样的映射。这根本不可能……加入不相关的表……
-
@RadimKöhler 它是一个自我加入。所以我不确定这怎么可能?
标签: c# sql .net nhibernate