В настоящее время я могу получить этот 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>();
где SomeDTO определяется как:
public class SomeDTO
{
public int GroupId { get; set; }
public int CountOfCompaniesInGroup { get; set; }
}
Я думаю, это немного излишне - создавать тип, специально предназначенный для извлечения данных из этого запроса. В идеале я мог бы использовать IDictionary<int,int>
, потому что встроен в фреймворк. Несмотря на то, что, похоже, я могу вернуть список.
Я думал, что смогу бросить подлого KeyValuePair<int,int>
в SetResultsTransformer
, вот так:
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>>();
, но result
- это просто пустая KeyValuePair. Есть ли для меня способ сделать это, или мне нужен DTO?