0

これを LINQ for NHibernate ステートメントまたはクエリオーバーで変換するにはどうすればよいですか? それはまったく可能ですか?標準的なもののようです (最新の関連オブジェクトは、いくつかの基準を満たす必要があります)。

select item, tag
from MyItem item
    join item.Tags tag
where tag.Id = (                                    
    select  max(tag2.Id)  
    from MyItem item2
        join item2.Tags tag2
    where item2.Id = item.Id
    group by item2.Id     
)  

よろしくお願いします、

4

1 に答える 1

1

わかりました、もう一度自分の質問に答えます。LINQ を使えば簡単です。

var resi = from x in session.Query<MyItem>()
                           let maxTagId = x.Tags.Max(tag => tag.Id)
                           select new { Item = x, Tag = x.Tags.Single(tag => tag.Id == maxTagId)};

生成されたSQLは次のようになります

SELECT myitem0_.id                                                        AS
       col_0_0_,
       (SELECT mytag2_.id
        FROM   myitem_mytag tags1_,
               [mytag] mytag2_
        WHERE  myitem0_.id = tags1_.myitemid
               AND tags1_.mytagid = mytag2_.id
               AND mytag2_.id = (SELECT Cast(Max(mytag4_.id) AS INT)
                                 FROM   myitem_mytag tags3_,
                                        [mytag] mytag4_
                                 WHERE  myitem0_.id = tags3_.myitemid
                                        AND tags3_.mytagid = mytag4_.id)) AS
       col_1_0_,
       myitem0_.id                                                        AS
       Id0_,
       myitem0_.name                                                      AS
       Name0_
FROM   [myitem] myitem0_ 

意味的に正しいようです。

于 2013-09-03T19:19:00.170 に答える