Лучший отвечающий
Как можно получить данные из класса сущностей LINQ to SQL

Вопрос
-
Здравствуйте.
Я выполнил запрос LINQ to SQL и в результате класс сущностей, соответствующий таблице, наполнился данными (надеюсь я правильно выразился). А вот теперь можно ли с целью получения данных уже из класса сущностей (для их использования в программе) выполнить LINQ to Object или LINQ to Entities к самому классу сущностей? Или, в этом случае, лучше использовать какой-нибудь цикл для прохода по классу сущностей? Было бы интересно узнать и получить ссылки на примеры.
С уважением Евгений.
30 апреля 2012 г. 13:23
Ответы
-
Практически да. Пока помечаю как ответ, но будут ещё воросы, которые задам отдельно. Извиняюсь за задержку с ответом. Спасибо.
С уважением Евгений.
- Помечено в качестве ответа TownSparrow 4 мая 2012 г. 17:42
- Изменено TownSparrow 4 мая 2012 г. 17:44
4 мая 2012 г. 17:42
Все ответы
-
Да, полученные через 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? Уточните ещё раз, пожалуйста.
С уважением Евгений.
1 мая 2012 г. 15:08 -
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
1 мая 2012 г. 15:16 -
Можно неожиданный вопрос? Вам принуипиально, какой провайдер LINQ , будет использоваться для выборки данных?
Если нет, то пишите спокойно свои запросы и пусть у программисто Microsoft болит голова как сделать их наиболее оптимальными.
Если же вы хотите извлечь данные в память программмы один раз и гарантированно не лазить за ними в базу данных, то скопируйте их в свою коллекцию (Например List<>). И дальше работайт е с этой коллекцией через Linq to Object.
1 мая 2012 г. 15:27Отвечающий -
MyEntityClass myEntities = new MyEntityClass(); var SelectedEntity = from Entities in myEntities where Entities.IsSelected = true select Entities;
Написал LINQ как показано выше. Где: MyEntityClass - класс сущностей (в который отображается таблица БД), myEntities - экземпляр этого класса, IsSelected - свойство в классе сущностей. В редакторе кода, в тексте самого запроса myEntities подчёркивается красным и выводится следующая ошибка:
Не удалось найти реализацию шаблона запроса для типа источника "MyProject.MyEntityClass". "Where" не найден.
Скажите, пожалуйста, что не правильно?
- Изменено TownSparrow 2 мая 2012 г. 17:04
2 мая 2012 г. 17:03 -
MyEntityClass - это класс, на который отображается одна строка из таблицы БД. А вся таблица отображается на свойство типа IQueryable<MyEntityClass> у контекста. Вы не можете сделать Where из одной строки.
2 мая 2012 г. 19:35 -
4 мая 2012 г. 10:44
-
Практически да. Пока помечаю как ответ, но будут ещё воросы, которые задам отдельно. Извиняюсь за задержку с ответом. Спасибо.
С уважением Евгений.
- Помечено в качестве ответа TownSparrow 4 мая 2012 г. 17:42
- Изменено TownSparrow 4 мая 2012 г. 17:44
4 мая 2012 г. 17:42 -
Запомните раз и навсегда для себя: запрос 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, только путать их не надо. Вот и вот ссылки, посмотрите. Последняя это Ваш вопрос, там я в конце дописал вчера.
11 мая 2012 г. 7:03Модератор -
Спасибо, Yatajga. Вобще, как я увидел - LINQ вещь очень удобная для доставания данных из их коллекций-хранидищ. Может кто даст ссылку, по которой можно бесплатно скачать книгу
LINQ: язык интегрированных запросов в C# 2010 для профессионалов
Адам Фримен, Джозеф C. Раттц-мл.
Заранее благодарен.
Евгений.
11 мая 2012 г. 13:31 -
Она новая и вряд ли можно будет её бесплатно скачать в сети, и ссылки подобные тут не разрешают. Можете найти старую, 2008. Она точно в сети есть.
"Вобще, как я увидел - LINQ вещь очень удобная для доставания данных из их коллекций-хранидищ" в большинстве случаев да, но не всегда.
11 мая 2012 г. 13:37Модератор -
OK.
12 мая 2012 г. 13:11