我在通过实体框架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();
}
所以我的问题是: