如何在模型绑定中使用分组查询

本文关键字:查询 模型 绑定 | 更新日期: 2023-09-27 18:14:23

. NET Web Forms应用程序,我使用(模型绑定/实体框架)。

我想在Gridview中显示我的Linq查询(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:如果你想使用用户模型本身,其中"用户"有你需要绑定到网格视图的属性。

  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;
    }
方法二:使用不同的模型'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")。

结果不是您的Model中的IQueryable,而是Anonymous Type中的IQueryable。所以它应该是这样的(创建一个新的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; }
}