流利的NHibernate:在左边连接中排序条件

时间:2013-02-23 19:29:31

标签: c# sql nhibernate fluent-nhibernate left-join

假设以下映射类:

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查询也很好。

1 个答案:

答案 0 :(得分:1)

您的案例的标准SQL查询将如下所示。是的,您需要Left Join来获取所有项目。

  

按其最新历史记录日期排序的所有项目,其中历史记录为HistoryType = A.即使对于没有hisotry的项目

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。例如。当项目没有历史记录时,返回的历史记录表reocrds将为null。因此像Colasce这样的函数可以帮助您add syntatic sugar to your query:)

请为Fluent NHibernate应用正确的语法(例如,是否对String / varchar列值使用反对/引号)。