1

次のマップされたクラスがあるとします。

public class Item
{
  public virtual int Id { get; set; }
  public virtual IEnumerable<History> Histories { get; set; }
}

public class History
{
  public virtual int Id { get; set; }
  public virtual Item Item { get; set; }
  public virtual DateTime Date { get; set; }
  public virtual HistoryType HistoryType { get; set; }
}

public enum HistoryType
{
  A = 1,
  B = 2
}

ここで、履歴が HistoryType = A である最新の履歴日付で並べ替えられたすべてのアイテムを取得できるようにしたいと考えています。すべてのアイテムに履歴があるわけではないため、左結合が必要だと思います。

私が必要としているのは Fluent NHibernate のクエリですが、これに対する正しい SQL クエリを確認することもできれば幸いです。

4

1 に答える 1

1

ケースの標準 SQL クエリは次のようになります。Left Joinはい、すべてのアイテムを入手するにはが必要です。

History が HistoryType = A である最新の History Date で並べ替えられたすべてのアイテム。

SELECT i.id, h.id, h.datetime, h.historytype
FROM ITEMS i
LEFT JOIN HISTORY h
ON i.id = h.itemid
WHERE h.HistoryType = 'A'
ORDER BY h.Datetime DESC

null の代わりにユーザー定義の値を表示することを選択した場合。たとえば、アイテムに履歴がない場合、返される履歴テーブルのレコードは null になります。したがって、次のような関数は、クエリに構文糖衣を追加するColasceのに役立ちます:)

に正しい構文を適用してください (たとえば、文字列/varchar 列の値にバックティック/逆コンマを使用するかどうか) Fluent NHibernate

于 2013-02-23T20:10:13.263 に答える