[asp.net]问题在网格中显示数据从 linq 查询

标签: Asp.net Linq .Net C#
发布时间: 2017/3/26 5:52:24
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我做此查询。LinqSQl

         var query = from order in mydb.Orders
                    join customer in mydb.Customers on order.CustomerID    equals customer.CustomerID
                    join employee in mydb.Employees on order.EmployeeID equals employee.EmployeeID
                    join shipper in mydb.Shippers on order.ShipVia equals shipper.ShipperID
                    join orderdetail in mydb.Order_Details on order.OrderID equals orderdetail.OrderID
                    join product in mydb.Products on orderdetail.ProductID equals product.ProductID
                    select new
                                 {
                                     OrderID = order.OrderID,
                                     CustomerName = customer.CompanyName,
                                     EmployeeName = employee.FirstName,
                                     ShipperName = shipper.CompanyName,
                                     Products = product.ProductName,
                                     TotalPrice = orderdetail.UnitPrice * orderdetail.Quantity

                                 }
                        into d
                        group d by d.OrderID;

然后我想在 datagrid 中显示此数据

那里是我的标记︰

              <%@ Page Title="Home Page" Language="C#"  AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="asp1._Default" %>
 <!DOCTYPE html>
  <html xmlns="http://www.w3.org/1999/xhtml">
 <head id="Head1" runat="server">
 </head>
  <body>
<form id="form1" runat="server">
<div>
     <asp:GridView ID="Grid" runat="server" AutoGenerateColumns="false"  
           CellPadding="4" ForeColor="#333333"  Width="600px">
        <Columns>
             <asp:BoundField DataField="OrderID" HeaderText="Name" />
             <asp:BoundField DataField="CustomerName" HeaderText="CustomerName" />
             <asp:BoundField DataField="EmployeeName" HeaderText="EmployeeName" />
             <asp:BoundField DataField="ShipperName" HeaderText="ShipperName" />
             <asp:BoundField DataField="Products" HeaderText="Products" />
             <asp:BoundField DataField="TotalPrice" HeaderText="TotalPrice" />
        </Columns>   
        <HeaderStyle BackColor="#7961da"  Font-Bold="True" ForeColor="White" />         
        <RowStyle BackColor="#F7F6F3"  ForeColor="#333333" />
      </asp:GridView>
</div>
</form>
</body>
 </html>

因此方法

         Grid.DataSource = query.ToList();
         Grid.DataBind();

我得到错误︰ 字段或属性的名称 '订单 id ' 找不到所选的数据源上。

我的问题是什么?

因为当我使用此查询

  var query1 = from order in mydb.Orders
                     join customer in mydb.Customers on order.CustomerID    equals customer.CustomerID
                     join employee in mydb.Employees on order.EmployeeID equals employee.EmployeeID
                     join shipper in mydb.Shippers on order.ShipVia equals shipper.ShipperID
                     join orderdetail in mydb.Order_Details on order.OrderID equals orderdetail.OrderID
                     join product in mydb.Products on orderdetail.ProductID equals product.ProductID

                     select new
                     {

                         OrderID = order.OrderID,
                         CustomerName = customer.CompanyName,
                         EmployeeName = employee.FirstName,
                         ShipperName = shipper.CompanyName,
                         Products = product.ProductName,
                         TotalPrice = orderdetail.UnitPrice * orderdetail.Quantity
                     };
                                 Grid.DataSource = query1;
                                 Grid.DataBind();

不显示数据,但它们不分组。

获取此数据

订单 id |CustomerName |EmployeeName |ShipperName |产品 |件总价

1          苹果        凯文            美国国际group (aig)        Iphone     1000年

1          苹果        凯文            美国国际group (aig)        IPAD     1100年

2         三星          约翰           KMP        S6       900

2         三星          约翰           KMP        S5       800

我想要这个结果。

订单 id |CustomerName |EmployeeName |ShipperName |产品   |件总价

1          苹果        凯文            美国国际group (aig)       Iphone、 Ipad     2100年

2         三星          约翰           KMP        S6,s5       1700年

解决方法 1:

当您使用 group by 中的 LINQ 表达式更改的类型从结果 IEnumerable<AnonType>IEnumerable<IGrouping<int, AnonType>> 作为 OrderID 现身要 int (请参阅文档的方法 group by 使用MSDN上的)。

因此你不能只显示为匿名类型的简单列表。

如果你想要的结果 OrderId 然后 group by 是在浪费时间︰ 使用 order by 进行排序。

如果你想要为每个处理的所有对象 OrderID 然后你需要进行分组。

编辑基于修正的问题︰

在显示之前的数据,似乎你想要总结通过运行 OrderId ,纯氧︰

  • 总结TotalPrice
  • 加入 Prodcts 与逗号分隔符。

这很容易够,但将意味着创建新的实例。入手 groupedData 从以前的查询︰

var outputData = groupedData.Select(g => new {
                                      OrderId = g.Key,
                                      […]
                                      Products = String.Join(", ", g.Select(x => x.Products)),
                                      TotalPrice = g.Select(x => x.TotalPrice).Sum()
                                    });

每个对象从 group byIGrouping<int, AnonType>IEnumerable<AnonType> 与其他 Key 属性 (什么它按分组); 因此可以使用通常的 LINQ 运算符来执行聚合。

官方微信
官方QQ群
31647020