1
edmx file: OrderData: 
ORDERID 
SHIPMENT 
DRIVER_ID 
RECEIVE_NAME 

,我們需要建立一個表,並打印每個DRIVER_ID 第一列:DRIVER_ID 第二欄:此DRIVER_ID 第三列多少行:有多少行與此DRIVER_ID和有RECEIVE_NAME NOT NULLLINQ實體框架 - 計數和查詢

請告訴我如何可以做到......我只設法打印getquery :(

SERVER.CS 

    public class OrderDataRepository : BaseRepository<OrderData> 
    { 


     public class OrderDataResults 
     { 
      public long DriverId { get; set; } 
      public int OrderCount { get; set; } 
      public int OrderCountWhereNameIsNotNull { get; set; } 
     } 




     public class OrderViewRepository : BaseRepository<OrderData> 
     { 
      public List<OrderDataResults> GetOrderDataResults() 
      { 
       return GetQuery(). 
         Where(x => x.SHIPMENT != null). 
         GroupBy(o => o.DRIVER_ID). 
         Select(g => 
           new OrderDataResults 
           { 
            DriverId = g.Key, 
            OrderCount = g.Count(), 
            OrderCountWhereNameIsNotNull = 
                 g.Count(o => o.RECEIVE_NAME != null) 
           }).ToList(); 
      } 
     } 







    CLIENT.ASPX.CS 

    public partial class Control : System.Web.UI.Page 
    { 

     protected void Page_Load(object sender, EventArgs e) 
     { 

      var rep = new OrderViewRepository(); 
      List<OrderDataResults> results = GetOrderDataResults(); 

**Error 12 The name 'GetOrderDataResults' does not exist in the current context 
Error 11 The type or namespace name 'OrderDataResults' could not be found (are you missing a using directive or an assembly reference?) 
** 
      DataViewer.DataSource = results; 
      DataViewer.DataBind(); 

     } 


    } 


    WEBPAGE.ASPX 
<form id="Form1" runat="server"> 
     <asp:GridView runat="server" ID="DataViewer"> 
     </asp:GridView> 
    </form> 

回答

2

根據註釋編輯答案。
我會定義一個類來先加入您的查詢的結果:

public class OrderDataResults // Or whatever you want to call it 
{ 
    public int DriverId { get; set; } 
    public int OrderCount { get; set; } 
    public int OrderCountWhereNameIsNotNull { get; set; } 
} 

從你的服務器,你可以返回的人的名單:

public class OrderViewRepository : BaseRepository<OrderView> 
{ 
    public List<OrderDataResults> GetOrderDataResults() 
    { 
     return GetQuery(). 
       Where(x => x.SHIPMENT != null). 
       GroupBy(o => o.DRIVER_ID). 
       Select(g => 
         new OrderDataResults 
         { 
          DriverId = g.Key, 
          OrderCount = g.Count(), 
          OrderCountWhereNameIsNotNull = 
               g.Count(o => o.RECEIVE_NAME != null) 
         }).ToList(); 
    } 
} 

和加載頁面時,你可以調用GetOrderDataResults()方法,讓你的清單:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var rep = new OrderViewRepository(); 
    List<OrderDataResults> results = rep.GetOrderDataResults(); 

    DataViewer.DataSource = results; 
    DataViewer.DataBind(); 
} 

爲了看到的結果,只是從你的刪除<Columns>節定義:

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

再次,你可能會想重構這個代碼,並儘快做出一些自己的結構決定你得到這個代碼的工作(例如,決定是否要從你的reporitory返回一個列表等)。
此外,您可能需要自定義表格的外觀,因此您可能需要查看GridView文檔。在你的情況下,你似乎只想顯示數據,所以更簡單的控制(例如Repeater)可能證明是更合適的。

+0

你不能使用getsomeresults函數,並告訴我如何使用上面的代碼,而不使用GetSomeResults ...你可以讓ne函數「count_drivers_orders」我粘貼的代碼只是爲了這個例子...這次我將粘貼我在server.cs文件中的所有代碼 – user1021182

+0

您的代碼在服務器端使用我的GetSomeResults函數...我正在尋找一種方法來替換該函數並僅檢索該表格。 – user1021182

+0

**您的代碼給出了我的錯誤:「錯誤名稱‘GetSomeResults’不在當前情況下存在** – user1021182