C# 查询SQL Server中的百分比
我有三个表:C# 查询SQL Server中的百分比,c#,sql-server,linq,entity-framework-5,C#,Sql Server,Linq,Entity Framework 5,我有三个表:Customers、Origins和(映射表)CustomerOrigins。请注意,客户可以来自多个来源(例如互联网,广告,时事通讯) 现在我想展示一个饼图,显示我的客户来自哪里 结果应该是一个列表 我完全不知所措,即使是在如何开始整个查询。。。任何提示都将不胜感激。您不能创建列表,因为列表只接受一个类型参数。请尝试以下方法: var results = (from c in db.Customers from o in c.Origins group
Customers
、Origins
和(映射表)CustomerOrigins
。请注意,客户可以来自多个来源
(例如互联网
,广告
,时事通讯
)
现在我想展示一个饼图,显示我的客户来自哪里
结果应该是一个列表
我完全不知所措,即使是在如何开始整个查询。。。任何提示都将不胜感激。您不能创建
列表
,因为列表
只接受一个类型参数。请尝试以下方法:
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();
哦,是的,就在
列表中。通过您的查询,我得到了一个异常:base{System.SystemException}={“用于调用'GroupBy'方法的键选择器类型在底层存储提供程序中是不可比较的。”}
c.Origins
将是一个集合(n:m关系),这就是为什么那里没有OriginName
属性。我尝试了c.CustomerOrigins的c组。选择(co=>co.Origin)进入g
和c.CustomerOrigins的c组。选择(co=>co.Origin)。选择(o=>o.DisplayName)进入g
但选择否avail@SeToY好吧,我想我现在明白多了——看看我的最新答案