2016-10-21 39 views
1

在我的ASP.NET Web窗體應用程序中,我使用(模型綁定/實體框架)。如何在模型綁定中使用Group By查詢

我想在GridView中顯示我的Linq Query(group by)的結果,但我不能!

<asp:GridView runat="server" ID="UsersGrid" 
     ItemType="myApp.Models.users" DataKeyNames="id" 
     SelectMethod="UsersGrid_GetData" 
     AutoGenerateColumns="false"> 
    <Columns> 
     <asp:DynamicField DataField="Fonction" /> 
     <asp:DynamicField DataField="Count" /> 
    </Columns> 
</asp:GridView> 

代碼背後:

public IQueryable<users> UsersGrid_GetData() 
{ 
    ModelData db = new ModelData(); 

    var result = from d in db.users 
       group d by d.Fonction into grouped 
       select new 
       { 
        Fonction = grouped.Key, 
        Count = grouped.Count() 
       }; 

    return result.AsQueryable();   
} 

我有這樣的錯誤:

無法隱式轉換類型'System.Linq.IQueryable <>來 'System.Linq.IQueryable' 。一個明確的 轉換不存在(是否缺少強制轉換?)

回答

1

您正在創建匿名類型的對象,並試圖將其轉換爲可查詢。這就是你得到這個錯誤的原因。方法1:如果您想使用用戶模型本身,其中「用戶」具有您需要綁定到網格視圖的屬性。

public IQueryable<users> UsersGrid_GetData() 
    { 
     ModelData db = new ModelData(); 

     var result = from d in db.users 
       group d by d.Fonction into grouped 
        select new users 
        { 
         Fonction = grouped.Key, 
         Count = grouped.Count() 
        }; 

     return result; 

    } 

方法2:使用不同的模型 'P'

public IQueryable<p> UsersGrid_GetData() 
    { 
     ModelData db = new ModelData(); 

     var result = from d in db.users 
       group d by d.Fonction into grouped 
        select new p 
        { 
         Fonction = grouped.Key, 
         Count = grouped.Count() 
        }; 

     return result; 

    } 

    public class p 
    { 
     public int? Fonction { get; set; } 
     public int Count { get; set; } 
    } 

而是 'P' 的提供有效的名稱,按您的應用程序。還可以在網格視圖中進行必要的更改(您可能需要更改「ItemType =」myApp.Models.users「)。

+0

非常感謝。 – ista9im

1

結果是不是你ModelIQueryable,它是Anonymous TypeIQueryable。因此,它應該是這樣的(創建一個新的DTO類,並返回它來代替):

public IQueryable<DTO> UsersGrid_GetData() 
{ 
    ModelData db = new ModelData(); 
    var result = from d in db.users 
       group d by d.Fonction into grouped 
       select new DTO 
       { 
        Fonction = grouped.Key, 
        Count = grouped.Count() 
       }; 
    return result.AsQueryable(); 
} 

public class DTO 
{ 
    public string Fonction { get; set; } 
    public int Count { get; set; } 
} 
+0

非常感謝。 – ista9im