none
Как можно получить данные из класса сущностей LINQ to SQL RRS feed

  • Вопрос

  • Здравствуйте.

    Я выполнил запрос LINQ to SQL и в результате класс сущностей, соответствующий таблице, наполнился данными (надеюсь я правильно выразился). А вот теперь можно ли с целью получения данных уже из класса сущностей (для их использования в программе) выполнить LINQ to Object или LINQ to Entities к самому классу сущностей? Или, в этом случае, лучше использовать какой-нибудь цикл для прохода по классу сущностей? Было бы интересно узнать и получить ссылки на примеры.

    С уважением  Евгений.

    30 апреля 2012 г. 13:23

Ответы

  • Практически да. Пока помечаю как ответ, но будут ещё воросы, которые задам отдельно. Извиняюсь за задержку с ответом. Спасибо.

    С уважением  Евгений.


    • Помечено в качестве ответа TownSparrow 4 мая 2012 г. 17:42
    • Изменено TownSparrow 4 мая 2012 г. 17:44

Все ответы

  • Да, полученные через LINQ to SQL объекты сущностей - это обычные объекты .NET. С коллекциями из них можно работать через обычный LINQ to Objects. Или проходить по ним обычными циклами. Как удобнее :)
    • Помечено в качестве ответа TownSparrow 30 апреля 2012 г. 16:58
    • Снята пометка об ответе TownSparrow 1 мая 2012 г. 14:51
    • Помечено в качестве ответа Abolmasov Dmitry 2 мая 2012 г. 11:12
    • Снята пометка об ответе TownSparrow 2 мая 2012 г. 18:46
    30 апреля 2012 г. 14:38
  • Я конечно извиняюсь, но я сейчас читаю в MSDN про LINQ to Object и там написано, что этот тип запросов можно использовать с коллекциями, поддерживающими IEnumerable или IEnumerable<T>, а класс сущностей LINQ to SQL (из которого я хочу сделать выборку с помощью LINQ) поддерживает по моему IQuerable, если я не ошибаюсь. Так с помощью LINQ To Objects точно можно выбирать из классов сущностей или для этой цели лучше использовать LINQ to Entities? Уточните ещё раз, пожалуйста.

    С уважением  Евгений.

  • IQueryable - это интерфейс-наследник от IEnumerable. Если объект реализует IQueryable - то он реализует и IEnumerable.

    Когда вы будете выбирать из "классов-сущностей" - вы не будете использовать LINQ To Objects или LINQ to Entities. Вы будете использовать LINQ. Если коллекция, из которой вы выбираете в коде - IQueryable с провайдером L2E - то отработает LINQ to Entities. Если коллекция - это какой-нибудь List<T> - то отработает провайдер LINQ To Objects. Начните писать код, станет понятнее, что  LINQ To Objects и LINQ to Entities - это один и тот же LINQ, а не два разных механизма. 

    • Предложено в качестве ответа Abolmasov Dmitry 2 мая 2012 г. 11:07
    • Отменено предложение в качестве ответа TownSparrow 2 мая 2012 г. 18:49
  • Можно неожиданный вопрос? Вам принуипиально, какой провайдер LINQ , будет использоваться для выборки данных?

    Если нет, то пишите спокойно свои запросы и пусть у программисто Microsoft болит голова как сделать их наиболее оптимальными.

    Если же вы хотите извлечь данные в память программмы один раз и гарантированно не лазить за ними в базу данных, то скопируйте их в свою коллекцию (Например List<>). И дальше работайт е с этой коллекцией через Linq to Object.

    Отвечающий
  • MyEntityClass myEntities = new MyEntityClass();
    var SelectedEntity = from Entities in myEntities
                                     where Entities.IsSelected = true
                                     select Entities;

    Написал LINQ как показано выше. Где: MyEntityClass - класс сущностей (в который отображается таблица БД), myEntities - экземпляр этого класса, IsSelected - свойство в классе сущностей. В редакторе кода, в тексте самого запроса myEntities подчёркивается красным и выводится следующая ошибка:

    Не удалось найти реализацию шаблона запроса для типа источника "MyProject.MyEntityClass". "Where" не найден.

    Скажите, пожалуйста, что не правильно?


  • MyEntityClass - это класс, на который отображается одна строка из таблицы БД. А вся таблица отображается на свойство типа IQueryable<MyEntityClass> у контекста. Вы не можете сделать Where из одной строки.

  • Здравствуйте.

    Вы разобрались с данной проблемой?


    Для связи [mail]

  • Практически да. Пока помечаю как ответ, но будут ещё воросы, которые задам отдельно. Извиняюсь за задержку с ответом. Спасибо.

    С уважением  Евгений.


    • Помечено в качестве ответа TownSparrow 4 мая 2012 г. 17:42
    • Изменено TownSparrow 4 мая 2012 г. 17:44
  • Запомните раз и навсегда для себя: запрос LINQ это выражение, которое вызывается в самый последний момент(так называемая отложенная загрузка) в перечислителе или при явных вызовах методов загрузки.

    "А вот теперь можно ли с целью получения данных уже из класса сущностей (для их использования в программе) выполнить LINQ to Object или LINQ to Entities к самому классу сущностей?" - LINQ to Objects - это вызов цепочки статических методов с аргументами делегатами за кулисами, а LINQ to SQL и LINQ to Entities трансляция тех же делегатов, в деревья выражений с последующей трансляцией в SQL запросы к базе. Внешне это одно и тоже, но внутри нет. LINQ to Objects - для локальных массивов и коллекций, а LINQ to SQL и LINQ to Entities - для БД. Теаерь когда Вы получаете данные при помощи LINQ to SQL то уже можете работать с ними локально используя LINQ to Objects, только путать их не надо. Вот и вот ссылки, посмотрите. Последняя это Ваш вопрос, там я в конце дописал вчера.

    Модератор
  • Спасибо, Yatajga. Вобще, как я увидел - LINQ вещь очень удобная для доставания данных из их коллекций-хранидищ. Может кто даст ссылку, по которой можно бесплатно скачать книгу

    LINQ: язык интегрированных запросов в C# 2010 для профессионалов

    Адам Фримен, Джозеф C. Раттц-мл.

    Заранее благодарен.

    Евгений.

  • Она новая и вряд ли можно будет её бесплатно скачать в сети, и ссылки подобные тут не разрешают. Можете найти старую, 2008. Она точно в сети есть.

    "Вобще, как я увидел - LINQ вещь очень удобная для доставания данных из их коллекций-хранидищ" в большинстве случаев да, но не всегда.

    Модератор