流利的NHibernate:在有条件的情况下按左键排序

本文关键字:情况下 排序 NHibernate 有条件 | 更新日期: 2023-09-27 18:01:00

假设以下映射类:

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
}

现在,我希望能够获取按其最新历史日期排序的所有项目,其中History为HistoryType=A。并非所有项目都有历史记录,所以我想需要左联接。

我需要的是一个Fluent NHibernate的查询,但也很高兴看到一个正确的SQL查询。

流利的NHibernate:在有条件的情况下按左键排序

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

所有按其最新历史日期订购的物品,其中历史为历史类型=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

如果您选择显示用户定义的值,则istead为null。例如,当一个项目没有历史记录时,返回的历史记录表reocrds将为空。因此,像Colasce这样的函数可以帮助您在查询中添加语法糖:(

请对Fluent NHibernate应用正确的语法(例如,是否对String/varchar列的值使用backtics/inverted逗号(。