以编程方式使用C#和LINQ进行分组(OnSelecting Maybe?)

时间:2012-07-18 00:47:22

标签: c# asp.net linq gridview grouping

我一直在寻找并希望得到一些想法 - 我目前有一个gridview,它从linq数据源获取源,它获取onselecting命令的数据。但是我正在尝试实施分组......

任何伪造的代码或关于我应该怎么做的指针?我的代码看起来像这样:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataSourceID="LinqDataSource1" EmptyDataText="There are no data records to display.">

..列设置和关闭gridview标记然后到linqdatasource ...

<asp:LinqDataSource ID="LinqDataSource1" runat="server" onselecting="LinqDataSource_Selecting" > 

到.cs页面!

public void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var db = new MyDataContext())
var orders = from order in db.tbl_orders 
select new {(order.Id, order.customer, order.state);
e.Result = orders;
}

我正在试图找出在所有这些中实现组的位置和方式。我见过的大多数例子都是在linqDataSource代码中进行分组(这给我带来了有趣的错误,认为它与onSelecting有关)或狡猾地建议我购买X产品。我试图按州分组 - 所以最终结果会是这样的:

California (3 orders)
ID Order
ID Order
ID Order
Montana (1 orders) 
ID Order

谢谢!

1 个答案:

答案 0 :(得分:0)

嗨,这是一个如何做到的例子

        public void Button_Click()
    {
        List<Order> ods = new List<Order>{new Order(){State="cali",ID=1},
                new Order(){State="cali",ID=2},
                new Order(){State="nali",ID=3},
                new Order(){State="pali",ID=4},
                new Order(){State="pali",ID=5},
        };
        List<Grouping> groups = new List<Grouping>();
        var orders = ods.GroupBy(g => g.State);
        foreach (var order in orders)
        {
            Grouping group = new Grouping() { State = order.Key, Orders = new List<Order>(), IDs = new List<int>() };
            order.ToList().ForEach(o => { group.Orders.Add(o); group.IDs.Add(o.ID); });
            groups.Add(group);
        }

    }
    public class Grouping
    {
        public string State { get; set; }
        public List<Order> Orders { get; set; }
        public List<int> IDs { get; set; }
    }
    public class Order
    {
        public string State
        {
            get;
            set;
        }
        public int ID
        {
            get;
            set;
        }
    }

这正是您想要的,除了dataSource和类不同但逻辑是相同的。我希望这能帮助你理解这个想法。