无法在csharp中使用linq生成图表

时间:2013-11-27 04:46:43

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

我在ASP.net中的Microsoft Visual Studio 12中使用c#和noob编写代码。

这就是csv文件的样子

ID, Engine Type, Car
111,vtec, 1
131,vtec, 1
157,boxer,1
148,boxer,1
167,vtec,1
158,,0
107,,0

ID应该是一个通用的自动编号,引擎类型应该是一个类型字符串,我不知道Car应该是什么,因为它包含1和0代表布尔值。这意味着1位客户拥有汽车,0位意味着客户没有汽车。

这是我如何创建一个列表。

var testingobject = (
    from line in File.ReadAllLines("testing.csv").Skip(0)
    let parts = line.Split(',')
    select new
    {
        ID = parts[0],
        Engine_Type = parts[1],
        Car = parts[2] //should i put int32.parse(parts[2]) here
    ).ToList();

我创建了一个简单的数组,其中包含ID,Engine Type,Car使用ToList()将其转换为列表,然后使用以下代码将其绑定到下拉列表:

string[] testingddl = new string[] { "ID", "Engine Type", "Car" };
List<String> mytestinglist = testingddl.ToList();
var mytestin = from m in mytestinglist
select m;
DropDownList1.DataSource = mytestin.AsEnumerable();
DropDownList1.DataTextField = "";
DropDownList1.DataValueField = "";
DropDownList1.DataBind();

用户选择Car并且应该给我一个图表,其中x轴为引擎类型,y轴为total。

问题:该列由1和0组成,表示客户是否有车(1)或不是(0)。
我想查看有多少用户拥有不同类型的引擎类型并将其绑定到一个柱状图。所以数据应该显示在x轴上,引擎类型和y轴应该有总数。根据数据,有3个vtec和2个拳击手。因此vtec代表一个总共3个列和2个拳击手。

我使用此linq查询和以下图表绑定代码。

if (tempval == "Car")// this is the current selected dropdown list value
{
    var myfavitems = testingobject.Where(a => a.Car == "1").ToList();
    foreach (var t in myfavitems.GroupBy(a => a.Engine_Type))
    {
        Series Series1 = new Series();
        Chart1.Series.Add(Series1);
        Chart1.Series[1].Points.AddXY(t.Key.ToString(), t.Count().ToString()).ToString();
        Chart1.DataSource = myfavitems.AsEnumerable();
        Chart1.Series[1].XValueMember = "Group Equipment Type";
        Chart1.Series[1].YValueMembers = "Software";
        Chart1.DataBind();
    // ...??

错误出现在我从csv文件中读取列的位置。错误显示Format exception was unhandled by user code: Input string was not in a correct format

select new  
{
    ID = parts[0],
    Engine_Type = parts[1],
    Car = Int32.Parse(parts[2])
}

我不知道该陈述有什么问题。有人可以帮帮我。

2 个答案:

答案 0 :(得分:1)

你想要一个像这样的课:

public class CarClass {
    public int Id { get; set; }
    public string Engine { get; set; }
    public int Car { get; set; }
}

然后执行以下操作:

var car_collection =
    from line in File.ReadAllLines("your_csv_name.csv").Skip(1)
    let parts = line.Split(',')
    select new CarClass()
    {
        Id = Int32.Parse(parts[0]),
        Engine = parts[1],
        Car = Int32.Parse(parts[2])
    };

var listy = car_collection.ToList();

否则,请注意'{}'和'()',因为它们不匹配:

var car_collection =
    (from line in File.ReadAllLines("your_csv_name.csv").Skip(1)
    let parts = line.Split(',')
    select new CarClass()
    {
        Id = Int32.Parse(parts[0]),
        Engine = parts[1],
        Car = Int32.Parse(parts[2])
    }).ToList();

这应该可以解决你的错误

答案 1 :(得分:0)

如果您的标题行是CSV文件,那么

Car = Int32.Parse(parts[2])

正在尝试将"Car"解析为Int32。

尝试阅读文件:

File.ReadAllLines("testing.csv").Skip(1)

跳过标题行。