Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询SQL Server中的百分比_C#_Sql Server_Linq_Entity Framework 5 - Fatal编程技术网

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好吧,我想我现在明白多了——看看我的最新答案