我有以下表格:
Customer(ID, Name)
Transaction(ID, CustomerID, Date)
表的映射对象是在没有对象的情况下定义的,只有原始类型:
Customer(int ID, string Name)
Transaction(int ID, string CustomerID, DateTime Date)
我想按升序选择所有客户及其上次购买日期。我尝试使用别名并使用客户ID和交易的客户ID创建连接,但我得到一个例外
无法解析财产:客户:交易
Transaction transaction = null;
Customer customer = null;
session.QueryOver<Transaction>(() => transaction).
SelectList(list => list.
Select(() => customer.Name).
SelectGroup(() => transaction.CustomerId).
SelectMin(() => transaction.Date)).
JoinQueryOver(() => customer).Where(() => customer.Id == transaction.Id).
OrderBy(Projections.Min<Transaction>(trans => trans.Date)).Asc.
List<object[]>().
ToList();
我不明白为什么它试图在交易中寻找一个客户财产,他们唯一一个在一行中的情况是在where子句中。我可能没有那么好地加入。
有人可以解释这个例外吗?
答案 0 :(得分:0)
错误的来源似乎是这个电话:JoinQueryOver(() => customer)
它告诉NHibernate尝试找到Transaction
类的名为“customer”的属性。
我相信你的查询应该是这样的:
session.QueryOver<Transaction>(() => transaction).
SelectList(list => list.
SelectSubQuery(QueryOver.Of<Customer>().Where(c => c.ID == transaction.ID).Select(c => c.Name)).
SelectGroup(() => transaction.CustomerId).
SelectMin(() => transaction.Date)
).
.OrderBy(Projections.Min<Transaction>(trans => trans.Date)).Asc.
List<object[]>().
ToList();