У меня проблема с заполнением Telerik RadComboBox через данные, извлекаемые из базы данных SQL через запрос Entity Framework LINQ. Когда я пытаюсь прикрепить результаты запроса через общую библиотеку, я получаю следующую ошибку:
Привязка данных непосредственно к запросу магазина (DbSet, DbQuery, DbSqlQuery)
не поддерживается ...
Однако, если я помещаю запрос непосредственно в коде ASPX с помощью .ToList (), он работает.
Некоторый фон
Я занимаюсь разработкой веб-приложения и фоновых сервисов, которые используют общую библиотеку. Библиотека содержит класс для модели 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();
}
Это не работает. Все, что я читаю, говорит о том, что простым решением является установка источника данных в 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;
}
}
Класс данных приложения
public IQueryable GetActiveRegions()
{
var results = new Regions();
return results.GetRegionsActive();
}
Итак, мои вопросы:
- Что я делаю неправильно, я хотел бы использовать общую библиотеку для повторного использования частей базы данных в других частях приложения.
- Почему .ToList () недоступен при использовании общей библиотеки? И в рабочей версии, и в нерабочих «результаты» имеют тип IQueryable.