从linq查询对象列表中更新列表对象

时间:2012-12-13 14:49:43

标签: c# asp.net linq list gridview

我有一个GridView数据源,它是会话中List的linq查询。

List<Invoice> returnInvoices = (List<Invoice>)Session["Invoices"];

    var partInvoices = from i in returnInvoices
                       where i.PartNo == partNo
                       select new
                       {
                           i.InvoiceID,
                           i.InvoiceNo,
                           i.InvoiceLine,
                           i.InvoiceDate,
                           i.OrderNo,
                           i.OrderLine,
                           i.OrderRel,
                           i.OrderLineItem,
                           i.OrderLineQty,
                           i.CustomerPO,
                           i.Serialized
                       };

    GridView3.DataSource = partInvoices;
    GridView3.DataBind();

当我从GridView中选择一行时,我需要更新原始会话列表中的相关对象,该列表包含的对象多于GridView。 (即所有部分的发票,而不仅仅是linq查询中的部分)

我的问题是,如何将GridView中的选定对象与原始列表相关联?我想使用GridView.SelectedIndex,但这不会起作用,因为GridView上的0可能是原始列表中的382!

我有点卡住而且不确定如何做到这一点,任何帮助或建议都会非常感激。

2 个答案:

答案 0 :(得分:0)

您必须使用invoiceid在会话中找到该对象,并更新通过网格更新的属性。

答案 1 :(得分:0)

不要在查询中创建新对象(匿名类型),而是绑定到实际对象。

List<Invoice> returnInvoices = (List<Invoice>)Session["Invoices"];

var partInvoices = returnInvoices
                       .Where(invoice => invoice.PartNo == partNo)
                       .ToList();

GridView3.DataSource = partInvoices;
GridView3.DataBind();

如果出于某些原因这是不可能的,那么事情就会开始变得有点混乱。您可以在字典中的LINQ查询中存储实际对象和对象之间的映射,但最好的解决方案实际上取决于您的需求。