Привязка данных о неполадках Iqueryable к RadComboBox - PullRequest
0 голосов
/ 25 мая 2019

У меня проблема с заполнением 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();
}

Итак, мои вопросы:

  1. Что я делаю неправильно, я хотел бы использовать общую библиотеку для повторного использования частей базы данных в других частях приложения.
  2. Почему .ToList () недоступен при использовании общей библиотеки? И в рабочей версии, и в нерабочих «результаты» имеют тип IQueryable.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...