C# 使用动态数据管理查询(商品)

C# 使用动态数据管理查询(商品),c#,asp.net,gridview,entity-framework-5,C#,Asp.net,Gridview,Entity Framework 5,我在数据库中有一个带有动态记录的表。我用静态数据(商品)得到了正确的结果,但我需要用动态数据得到结果 数据库表为: Id Month Commodity Amount ---------------------------- 1 May wheat 100 2 May rice 200 3 June wheat 400 4 July maize 100 5 June wheat 100

我在数据库中有一个带有动态记录的表。我用静态数据(商品)得到了正确的结果,但我需要用动态数据得到结果

数据库表为:

Id  Month  Commodity  Amount
----------------------------
1   May     wheat      100
2   May     rice       200
3   June    wheat      400
4   July    maize      100
5   June    wheat      100
我的结果是:

 Month      wheat    rice    maize
 --------------------------------
 May        100      200     
 June       500
 July                        100    
我的aspx代码:

<asp:GridView ID="grdData" runat="server">
</asp:GridView>

在上面的查询中,它是静态的(小麦、大米和玉米),但我需要这些商品动态。。。请帮助我如何使用动态数据(商品)管理这些数据。

如果您可以使用数据表而不是列表,以下代码将帮助您。请记住,这只是一个示例代码,可以帮助您理解这个概念。请根据您的输入数据检查循环的效率

它填充表,您可以将表分配给数据源

var list = new[]
                           {
                               new { Id = 1, Month = 2, Commodity = "Wheat", Amount = 20 },
                               new { Id = 2, Month = 2, Commodity = "Maize", Amount = 30 },
                               new { Id = 3, Month = 2, Commodity = "Barley", Amount = 30 },
                               new { Id = 4, Month = 1, Commodity = "Wheat", Amount = 20 },
                               new { Id = 5, Month = 1, Commodity = "Maize", Amount = 30 },
                               new { Id = 6, Month = 3, Commodity = "Barley", Amount = 30 }
                           };

            // group data by month and keep all rows
            var data =
                list.GroupBy(r => r.Month)
                    .Select(
                        r =>
                        new 
                            {
                                Month = r.Key,
                                Data = r.ToList()
                            })
                    .ToList();

            // get a list of all available commodities
            var allColumns = data.SelectMany(d => d.Data.Select(s => s.Commodity)).Distinct().ToList();

            // create a table
            var datatable = new DataTable();
            datatable.Columns.Add(new DataColumn("Month"));

            // add all commodities as columns
            allColumns.ForEach(c=>datatable.Columns.Add(new DataColumn(c)));

            // create 1 row for each month group and fill the columns
            data.ForEach(
                d =>
                    {
                        var row = datatable.NewRow();
                        row["Month"] = d.Month;
                        allColumns.ForEach(c => row[c] = d.Data.Where(g => g.Commodity == c).Sum(g => g.Amount));
                        datatable.Rows.Add(row);
                    });

商品的第一个计数号,使用rows.count或count(sql),只需为(i=0;i如何在linq查询中使用for循环)编写一个循环?
var list = new[]
                           {
                               new { Id = 1, Month = 2, Commodity = "Wheat", Amount = 20 },
                               new { Id = 2, Month = 2, Commodity = "Maize", Amount = 30 },
                               new { Id = 3, Month = 2, Commodity = "Barley", Amount = 30 },
                               new { Id = 4, Month = 1, Commodity = "Wheat", Amount = 20 },
                               new { Id = 5, Month = 1, Commodity = "Maize", Amount = 30 },
                               new { Id = 6, Month = 3, Commodity = "Barley", Amount = 30 }
                           };

            // group data by month and keep all rows
            var data =
                list.GroupBy(r => r.Month)
                    .Select(
                        r =>
                        new 
                            {
                                Month = r.Key,
                                Data = r.ToList()
                            })
                    .ToList();

            // get a list of all available commodities
            var allColumns = data.SelectMany(d => d.Data.Select(s => s.Commodity)).Distinct().ToList();

            // create a table
            var datatable = new DataTable();
            datatable.Columns.Add(new DataColumn("Month"));

            // add all commodities as columns
            allColumns.ForEach(c=>datatable.Columns.Add(new DataColumn(c)));

            // create 1 row for each month group and fill the columns
            data.ForEach(
                d =>
                    {
                        var row = datatable.NewRow();
                        row["Month"] = d.Month;
                        allColumns.ForEach(c => row[c] = d.Data.Where(g => g.Commodity == c).Sum(g => g.Amount));
                        datatable.Rows.Add(row);
                    });