如何在模型绑定

时间:2016-10-21 09:28:31

标签: c# asp.net entity-framework linq model-binding

在我的ASP.NET Web窗体应用程序中,我使用(模型绑定/实体框架)。

我想在Gridview中显示我的Linq查询(分组依据)的结果,但我不能!!

<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&lt;&gt;'至   'System.Linq.IQueryable'。一个明确的   存在转换(你错过了演员吗?)

2 个答案:

答案 0 :(得分:2)

您正在创建匿名类型的对象并尝试将其转换为可查询对象。这就是你得到这个错误的原因。

试试这个: 方法1:如果您想使用用户模型本身,其中'users'具有您需要绑定到网格视图的属性。

  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“)。

答案 1 :(得分:1)

结果不是IQueryable的{​​{1}},而是Anonymous TypeModel。所以它应该是这样的(创建一个新的IQueryable类并返回它):

DTO