我有三个表:Customers
,Origins
和 (映射表) CustomerOrigins
。请注意,客户可以来自多个(Origin
例如Internet
, Advertisement
)Newsletter
现在我想显示一个饼图,说明我的客户来自哪里。
结果应该是List<string, double>
.
我完全迷失了,即使是如何开始整个查询......任何提示将不胜感激。
我有三个表:Customers
,Origins
和 (映射表) CustomerOrigins
。请注意,客户可以来自多个(Origin
例如Internet
, Advertisement
)Newsletter
现在我想显示一个饼图,说明我的客户来自哪里。
结果应该是List<string, double>
.
我完全迷失了,即使是如何开始整个查询......任何提示将不胜感激。
你不能做 aList<string, double>
因为List<T>
只接受一个类型参数。试试这个:
var results =
(from c in db.Customers
from o in c.Origins
group o by o.DisplayName into g
let total = db.Customers.Count()
select new
{
Origin = g.Key,
Percent = ((double)g.Count() / (double)total) * 100
})
.ToList();
这有可能多次计算单个客户(每个来源一次),因此您不会想出总计 100% 的列表。
如果你想要一个百分比超过CustomerOrigin
记录,试试这个
var results =
(from c in db.Customers
from o in c.Origins
group o by o.DisplayName into g
let total = db.Customers.Sum(x => x.Origins.Count())
select new
{
Origin = g.Key,
Percent = ((double)g.Count() / (double)total) * 100
})
.ToList();