Nhibernate中的SelectList和Projection有什么区别?

Los*_*nos 0 nhibernate queryover

如标题所示。

(在我看来,这SelectList是一种无需使用该Projections方法即可创建投影的方法。)

Rad*_*ler 5

我会说文档中有完整的解释:

QueryOver允许添加任意IProjection(允许投影私有属性)。Projections工厂类还具有重载以允许使用Lambda表达式:

IList selection =
    session.QueryOver<Cat>()
        .Select(Projections.ProjectionList()
            .Add(Projections.Property<Cat>(c => c.Name))
            .Add(Projections.Avg<Cat>(c => c.Age)))
        .List<object[]>();
Run Code Online (Sandbox Code Playgroud)

此外,还有一种用于创建投影列表的内联语法,该语法不需要显式的类限定:

IList selection =
    session.QueryOver<Cat>()
        .SelectList(list => list
            .Select(c => c.Name)
            .SelectAvg(c => c.Age))
        .List<object[]>();
Run Code Online (Sandbox Code Playgroud)

参见检查16.6。投影