0

この SQL クエリと同じ結果を得るための NHibernate フィルターは次のとおりです。

SELECT A.Id as ItemId, A.column1 as ItemTitle, A.ListId as ItemListId,
B.Id as LookupItemId, B.Value as LookupItemValue, B.ListId as LookupItemListId
FROM MyTable A LEFT JOIN MyTable B ON B.Id = A.LookupId     
WHERE A.ListId = 'EmployeeListGuid'
AND (B.ListId='EmployeerListGuid' OR B.Id IS NULL)    
4

1 に答える 1

0

まず、エンティティ プロパティのエイリアスを作成します。これによりLEFT JOIN、テーブルが自分自身になります。

criteria.CreateAlias("LookupItem", "B", JoinType.LeftOuterJoin);

次に、このエイリアスを基準で使用できます。

critera.Add(Restrictions.Eq("ListId", "EmployeeListGuid"));    
critera.Add(
    Restrictions
      .Or(
        Restrictions.Eq("B.ListId", "EmployeerListGuid"), 
        Restrictions.IsNull("B.Id")));
于 2013-07-10T13:51:55.853 に答える