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

时间:2013-11-26 05:44:23

标签: c# asp.net sql linq visual-studio-2012

我使用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行没有汽车。

4 个答案:

答案 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)

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

Find Duplicates using LINQ

答案 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