C# ICriteria是否可以返回IDictionary而不是List<;DTO>;?

C# ICriteria是否可以返回IDictionary而不是List<;DTO>;?,c#,nhibernate,C#,Nhibernate,目前,我可以使用此SetResultTransformer方法返回任意类型的DTO列表,如下所示: var result = _session.CreateCriteria<Company>() .Add(Restrictions.In(groupCompanyInfo, (int[])groups.Select(xx => xx.Id).ToArray())) .SetProjection(Projections.ProjectionList()

目前,我可以使用此
SetResultTransformer
方法返回任意类型的DTO列表,如下所示:

var result = _session.CreateCriteria<Company>()
    .Add(Restrictions.In(groupCompanyInfo, (int[])groups.Select(xx => xx.Id).ToArray()))
    .SetProjection(Projections.ProjectionList()
        .Add(Projections.GroupProperty(groupCompanyInfo), "CompanyInfoGroupID")
        .Add(Projections.RowCount(), "TotalNumberOfCompanies"))
    .SetResultTransformer(Transformers.AliasToBean<SomeDTO>())
    .List<SomeDTO>();
但是,我认为创建一个专门用于从查询中提取数据的类型有点过分了。理想情况下,我可以使用
IDictionary
,因为它内置于框架中。就目前而言,我似乎可以返回一个列表

我想我可以在
SetResultsTransformer
中偷偷地抛出一个
KeyValuePair
,如下所示:

var result = _session.CreateCriteria<Company>()
    .Add(Restrictions.In(groupCompanyInfo, (int[])groups.Select(xx => xx.Id).ToArray()))
    .SetProjection(Projections.ProjectionList()
        .Add(Projections.GroupProperty(groupCompanyInfo))
        .Add(Projections.RowCount())) // note, I removed the aliases
    .SetResultTransformer(Transformers.AliasToBean<KeyValuePair<int, int>>())
    .List<KeyValuePair<int, int>>();
var result=\u session.CreateCriteria()
.Add(Restrictions.In(groupCompanyInfo,(int[])groups.Select(xx=>xx.Id).ToArray())
.SetProjection(Projections.ProjectionList()项目)
.Add(Projections.GroupProperty(groupCompanyInfo))
.Add(Projections.RowCount())//注意,我删除了别名
.SetResultTransformer(Transformers.AliasToBean())
.List();

但是
result
只是一个空的KeyValuePair。有什么方法可以做到这一点,或者我需要DTO吗?

使用客户端Linq投影。我一直在这样做:

var result = _session.CreateCriteria...
             .List<object[]>
             .ToDictionary(x => (int)x[0], x => (int)x[1]);
var result=\u session.CreateCriteria。。。
列表
.ToDictionary(x=>(int)x[0],x=>(int)x[1]);
var result=\u session.CreateCriteria()
.Add(Restrictions.In(groupCompanyInfo,(int[])groups.Select(xx=>xx.Id).ToArray())
.SetProjection(Projections.ProjectionList()项目)
.Add(Projections.GroupProperty(groupCompanyInfo))
.Add(Projections.RowCount())//注意,我删除了别名
.List();
这应该返回
IList
:)

var result = _session.CreateCriteria...
             .List<object[]>
             .ToDictionary(x => (int)x[0], x => (int)x[1]);
var result = _session.CreateCriteria<Company>()
    .Add(Restrictions.In(groupCompanyInfo, (int[])groups.Select(xx => xx.Id).ToArray()))
    .SetProjection(Projections.ProjectionList()
        .Add(Projections.GroupProperty(groupCompanyInfo))
        .Add(Projections.RowCount())) // note, I removed the aliases
    .List();