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 查询将如下所示。是的,您需要 aLeft Join来获取所有物品。

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

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。例如,当项目没有历史记录时,返回的历史记录表记录将为空。因此,像这样的功能Colasce可以帮助您在查询中添加语法糖:)

请为Fluent NHibernate.

于 2013-02-23T20:10:13.263 回答