1
我需要執行一個連接兩個表的查詢,按值分組,並返回組密鑰和計數。NHibernate Group By Many-to-Many Association
CREATE TABLE Message(
ID INT NOT NULL
, Note NVARCHAR(128));
CREATE TABLE Message_Users(
MessageID INT NOT NULL
, UserID NVARCHAR(128) NOT NULL);
我需要執行這個查詢:
SELECT mu.UserID, COUNT(m.ID)
FROM Message m
JOIN Message_Users mu
ON m.ID = mu.MessageID
GROUP BY mu.UserID;
我怎樣才能做到這一點使用NHibernate的?消息表映射如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DataModel" namespace="DataModel.Message">
<class name="Message" table="Message">
<id name="ID">
<generator class="native" />
</id>
<bag name="AssociatedUsers" table="Message_Users" lazy="false">
<key column="MessageID" />
<element column="UserID" type="System.String" />
</bag>
</class>
</hibernate-mapping>
我已經看過其他一些問題,但沒有達到相當這個用例(大量的GroupBy的,但不能與關聯; plenty of join, but not with a group by)
兩個方向我已經開始準備:
//首先嚐試
// Doesn't work as message.AssociatedUsers is a collection, so mu.Key is actually a collection
var query = transactionContext.Session.Query<Message>();
var r = from message in query
group message by message.AssociatedUsers into mu
select new {UserID = mu.Key, Count = mu.Count()};
//第二次嘗試
var query = transactionContext.Session.QueryOver<Message>();
var join = query.Right.JoinQueryOver<string>(_message => _message.AssociatedUsers);
var select = join.Select(
// Select generic parameter doesn't seem to be related to the type of the join (<Message, string>)
Projections.Group<string>(...
純金,選項1工作就像一個魅力。我沒有想到要在關聯本身上進行隱式連接 - 現在我明白了。謝謝=) – Travis