У меня есть родительская сущность Category_Types с коллекцией дочерних сущностей Категории Каждая из этих дочерних сущностей имеет коллекцию дочерних сущностей Расходы:
Category_Types >> Категории (1: n), Категории >> Расходы(1: n)
Я хочу запросить суммарные расходы для определенного Category_Type между определенными датами в следующем не отображенном классе
public class EntityTotals<T>
{
T _Entity;
public T Entity
{
get
{
return _Entity;
}
set
{
_Entity = value;
}
}
decimal _Total;
public decimal Total
{
get
{
return _Total;
}
set
{
_Total = value;
}
}
}
У меня следующий SQL-запрос:
select ct.Cat_Type , SUM(isnull(e.Spends,0)) from Expenses e right join Categories c on e.Category_Id = c.Category_Id
right join Category_Types ct on ct.Cat_Type_Id = c.Cat_Type_Id
where e.Spend_Date between @from and @to
group by ct.Cat_Type
, поэтому я написал запрос, используя QueryOver <>, чтобы получить те же результаты запроса sql, и я получил результаты в классе EntityTotals <> следующим образом:
Expenses e = null;
Categories c = null;
Category_Types ct = null;
return Session.QueryOver<Expenses>((() => e))
.JoinAlias(() => e.Category, () => c)
.JoinAlias(() => c.Category_Type, () => ct)
.WhereRestrictionOn(() => e.Spend_Date)
.IsBetween(from)
.And(to)
.SelectList(list => list
.SelectGroup(() => ct)
.SelectSum(ee => ee.Spends))
.List<object[]>()
.Select(exp =>
new EntityTotals<Categories>()
{
Entity = (Categories)exp[0],
Total = (decimal)exp[1]
})
.ToList<EntityTotals<Categories>>();
при тестировании этогозапрос дал мне следующее исключение:
не удалось разрешить свойство: ct of: Расходы
, поэтому я попытался получить только некоторые свойства Category_Types в следующий не отображенный класс
public class Totals
{
int _Id;
public int Id
{
get
{
return _Id;
}
set
{
_Id = value;
}
}
decimal _Total;
public decimal Total
{
get
{
return _Total;
}
set
{
_Total = value;
}
}
}
с помощью следующего запроса, чтобы получить только свойство Cat_Type_Id для Category_Types, и оно отлично работает:
Expenses e = null;
Categories c = null;
Category_Types ct = null;
return Session.QueryOver<Expenses>((() => e))
.JoinAlias(() => e.Category, () => c)
.JoinAlias(() => c.Category_Type, () => ct)
.WhereRestrictionOn(() => e.Spend_Date)
.IsBetween(from)
.And(to)
.SelectList(list => list
.SelectGroup(() => ct.Cat_Type_Id)
.SelectSum(ee => ee.Spends))
.List<object[]>()
.Select(exp =>
new Totals()
{
Id = (int)exp[0],
Total = (decimal)exp[1]
})
.ToList<Totals>();
, так как я могу получить полныйобъект Category_Types из первого запроса?
Спасибо;