无法查询到RadComboBox的数据绑定问题

时间:2019-05-25 04:54:06

标签: c# entity-framework-6

我在通过实体框架LINQ查询从SQL数据库中提取数据来填充Telerik RadComboBox时遇到问题。当我尝试附加通过共享库提取的查询结果时,出现以下错误:

  

直接绑定到商店查询(DbSet,DbQuery,DbSqlQuery)的数据是   不支持...

但是,如果我将查询直接放在.ToList()后面的ASPX代码中,则它将起作用。

某些背景 我正在开发使用公共共享库的Web应用程序和后台服务。该库包含一个用于Entity模型的类,一个用于数据库查询的内部类以及一个用于格式化内部查询的返回结果格式的公共类。

该网络应用为隐藏代码中的OnItemsRequested调用一个方法:

ASPX

<telerik:RadComboBox 
ID="PingRegionComboBox"
runat="server"
EmptyMessage="Select Region..."
EnableLoadOnDemand="True"
OnItemsRequested="RegionComboBox">

使用共享库进行代码隐藏(无效):

protected void RegionComboBox(object sender, RadComboBoxItemsRequestedEventArgs e)
{
    var context = new AppData();
    var results = context.GetActiveRegions();
    PingRegionComboBox.DataTextField = "region_name";
    PingRegionComboBox.DataValueField = "id";
    PingRegionComboBox.DataSource = results;
    PingRegionComboBox.DataBind();
}

这不起作用。我读过的每件事都说,简单的解决方法是将Datasource设置为results.ToList()。问题是ToList()不可用。

如果我将其后面的代码更改为该代码,它将起作用:

代码隐藏(有效):

protected void RegionComboBox(object sender, RadComboBoxItemsRequestedEventArgs e)
{
    using (var context = new Entities())
    {
        var results = from r in context.regions
        where r.enabled == 1
        orderby r.region_name
        select new
        {
            r.id,
            r.region_name
    };

    PingRegionComboBox.DataTextField = "region_name";
    PingRegionComboBox.DataValueField = "id";
    PingRegionComboBox.DataSource = results.ToList();
    PingRegionComboBox.DataBind();
}

共享库如下:

DBClass Regions.cs

internal IQueryable GetRegionsActive()
{
   try
   {
        using (var context = new Entities())
        {
           var results = from r in context.regions
           where r.enabled == 1
           orderby r.region_name
           select new
           {
               r.id,
               r.region_name
           };
           return results;
         }
    catch (Exception e)
    {
        Console.WriteLine(e);
        throw;
    }
}

AppData类

public  IQueryable GetActiveRegions()
{
    var results = new Regions();
    return results.GetRegionsActive();
}

所以我的问题是:

  1. 我在做什么错,我想使用共享库以便在应用程序其他部分重用数据库部分。
  2. 为什么当我使用共享库时.ToList()不可用?在有效版本和无效版本中,“结果”均为IQueryable类型。

0 个答案:

没有答案