2

我有三个表:Customers,Origins和 (映射表) CustomerOrigins。请注意,客户可以来自多个(Origin例如Internet, AdvertisementNewsletter

现在我想显示一个饼图,说明我的客户来自哪里。

结果应该是List<string, double>.

我完全迷失了,即使是如何开始整个查询......任何提示将不胜感激。

4

1 回答 1

2

你不能做 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();
于 2013-04-15T15:19:58.397 回答