Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# 需要使用linq计算重复项并将其绑定到图表_C#_Asp.net_Sql_Linq_Visual Studio 2012 - Fatal编程技术网

C# 需要使用linq计算重复项并将其绑定到图表

C# 需要使用linq计算重复项并将其绑定到图表,c#,asp.net,sql,linq,visual-studio-2012,C#,Asp.net,Sql,Linq,Visual Studio 2012,我正在Microsoft Visual Studio中使用C#在ASP.net中编写代码。从.csv文件读取数据 比方说,我有一个由150行3列组成的表。 设计如下:ID、发动机类型、汽车。ID列有一个通用ID,engine type(发动机类型)列由4种不同类型的发动机组成,Car(汽车)列由1表示是,0表示否。这意味着是的,他们有汽车,不,他们没有汽车 var myitems = from a in mylist where (a.Car_ == "1")

我正在Microsoft Visual Studio中使用C#在ASP.net中编写代码。从.csv文件读取数据

比方说,我有一个由150行3列组成的表。 设计如下:ID、发动机类型、汽车。ID列有一个通用ID,engine type(发动机类型)列由4种不同类型的发动机组成,Car(汽车)列由1表示是,0表示否。这意味着是的,他们有汽车,不,他们没有汽车

var myitems = from a in mylist  
              where (a.Car_ == "1") 
              select a.Engine_Type;
这仅选择“拥有”汽车的列。我使用它并将其绑定到我的图表

Chart1.DataSource = myitems.AsEnumerable().Distinct();
Chart1.Series[0].XValueMember = "Engine Type";
Chart1.Series[0].YValueMembers = "Car";
Chart1.DataBind()
我的查询将它绑定到图表中,使其完美地运行,并且图表在x轴上具有不同的引擎类型。 问题::这就是问题所在,假设有137人在car栏中的答案是肯定的。在四种不同类型的发动机中,有135种有vtec,2种有boxer。在这种情况下,我希望看到适当值的列,vtec=135和boxer=2
换句话说,我需要计算汽车栏中有多少vtec和boxer,并将其显示在同一张图表上。目前,我在where语句中使用它来过滤表中的零行,这意味着13行没有汽车。

这可能对您有用,请查找以下链接

var myitems = from a in mylist  
              where (a.Car_ == "1") 
              select a.Engine_Type;
LINQ方法适用于:

var myitems = mylist.Where(item => item.Car_ == "1").GroupBy(item => item.Engine_Type);
将所有发动机类型重新组合在一起


如果在此之后执行,例如
myitems.ElementAt(0).Count()
您将获得第一个引擎类型的重复数。

您可以使用GroupBy子句。请参见以下代码以了解相同的信息:

设计页面:

<asp:Chart runat="server" ID="chart1" Width="500px" Height="500px">
    <Series>
        <asp:Series ChartType="Line" Name="chartSeries" Color="Orange" LabelForeColor="Orange" Font="Tahoma, 11px, style=Bold"
            IsVisibleInLegend="True" BorderWidth="2" IsValueShownAsLabel="True" >
        </asp:Series>
    </Series>
    <ChartAreas>
        <asp:ChartArea Name="carArea" BackColor="Transparent">
            <AxisX Interval="1" TitleForeColor="White" >
                <LabelStyle ForeColor="White" Font="Tahoma, 12px, style=Bold" />
            </AxisX>
            <AxisY>
                <LabelStyle ForeColor="White" Font="Tahoma, 12px, style=Bold" />
            </AxisY>
        </asp:ChartArea>
    </ChartAreas>
</asp:Chart>

您可以使用以下linq:

var pl = from r in mylist
orderby r.Engine_Type    
group r by r.Engine_Type into grp
select new { key = grp.Key, cnt = grp.Count()};
这样,您的pl集合将具有具有各自计数的所有引擎类型

问候,


尼廷·乔希(Nitin Joshi)

您可以尝试使用@Grundy,我似乎无法在“按布尔分组”下提供的链接中使用where子句。我需要查看x轴上的引擎类型和y轴上的每种引擎类型的总数。Pierre,我得到以下错误“System.Linq.Lookup
2+Grouping[System.String,f_uAnonymousType1
89[System.String,System.String,”当我使用它时。我想我理解你在那里做了什么,但即使这样,我也得到了更准确的答案:这是错误。ArgumentException未经用户代码处理。你的答案对我来说更有意义。但它仍然给了我“system.web.DataVisualization.dll中发生了类型为'system.argumentexception'的第一次意外异常。知道这是什么吗?在图表中是否定义了系列?您面临的错误可能是由于此原因。因此,请首先确认您已为图表定义了系列。系列系列1=新系列();图表1.series.Add。”(Series1);Chart1.DataSource=myfavitems.AsEnumerable();Chart1.Series[0]。XValueMember=“集团设备类型”Chart1.Series[0]。YValueMembers=“软件”Chart1.Databind();在这个位置上,它会带来错误。我会尽快回复你。如果没有出现错误,你的答案是最接近的。我会添加代码,并在几个小时后回复你。谢谢不要忘记将其标记为答案并对该解决方案进行评分。这样它也可以帮助其他用户。嗨,尼廷,根据你的代码,我是pulling引擎类型的所有实例。没有筛选器,我可以将有车的人和没有车的人分开。但是根据您的代码,您已经在(a.Car==“1”)上筛选了集合,因此您的mylist集合将只包含有车的人。