我使用C#在ASP.net中的Microsoft Visual Studio中编码。数据从.csv文件中读取。
假设我有一个由150行乘3列组成的表。 设计如下:ID,发动机类型,汽车。 ID列具有通用ID,引擎类型列由4种不同类型的引擎组成,Car列由1表示yes,0表示no。这意味着他们有车,没有他们没有车。
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个人在汽车专栏中是这样的1。在四种不同类型的发动机中,其中135种具有vtec,其中2种具有拳击手。在这种情况下,我希望看到适当值的列,vtec = 135和boxer = 2 换句话说,我需要计算汽车列中有多少vtec和拳击手,并将它显示在同一个图表上。目前我在where语句中使用它来过滤掉表中的零行,这意味着13行没有汽车。
答案 0 :(得分:1)
LINQ GroupBy方法就是为了这个:
var myitems = mylist.Where(item => item.Car_ == "1").GroupBy(item => item.Engine_Type);
将每个Engine_Type重新组合在一起。
如果之后您执行myitems.ElementAt(0).Count()
,您将获得第一种引擎类型的重复数量。
答案 1 :(得分:1)
您可以使用分组依据。请参阅以下代码:
设计页面
<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>
代码背后:
var chartData = mylist.Where(a => a.Car_ == "1").ToList();
foreach (var t in chartData.GroupBy(a => a.Engine_Type))
{
chart1.Series[0].Points.AddXY(t.Key, t.Count());
}
答案 2 :(得分:0)
可能这对您有用,请找到以下链接
答案 3 :(得分:0)
你可以使用以下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