我有一个父实体 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;
}
}
}
使用以下查询仅获取 Category_Types 的属性 Cat_Type_Id 并且它工作正常:
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 的完整对象?
谢谢 ;