powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq - вторая форма Select
9 сообщений из 9, страница 1 из 1
Linq - вторая форма Select
    #38939508
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Хочу в последовательности полученной из базы данных (repository.Products) получить индекс того или иного элемента в этой последовательности. Казалось бы, используй вторую форму Select, которая определяется следующим образом

Queryable.Select<TSource, TResult>
- метод (IQueryable<TSource>, Expression<Func<TSource, Int32 , TResult>>)

и дело в шляпе!
Но не тут-то было!
Это работает на массиве и не работает на той последовательности, которую я получил из базы (IQurable<...>), хотя, вроде, всё одинаково. Компилируется нормально, а при выполнении запроса идёт ошибка (см. рисунок).
Что тут не так?
...
Рейтинг: 0 / 0
Linq - вторая форма Select
    #38939519
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer, не все методы C# поддерживаются в LINQ to SQL/EF. Пронумеровать записи можно и без помощи сервера:
Код: c#
1.
2.
3.
4.
5.
6.
7.
var qProd = repository.Products.Select(p => p.Name);
int idx = 0;
foreach (var name in qProd)
{
    Console.WriteLine("idex = {0} Число = {1}", idx, name);
    idx++;
}
...
Рейтинг: 0 / 0
Linq - вторая форма Select
    #38939539
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

Ну да, ну да! Тупой перебор - это первое, что мне пришло в голову, но потом попался примерчик с массивом и я решил попробовать по аналогии. Тем более, что ни о каких ограничениях в Msdn-не ничего не говорилось.
Спасибо!
...
Рейтинг: 0 / 0
Linq - вторая форма Select
    #38939787
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

Нашёл я выход из положения. Нужно перед использованием Select((...) => ...) полученную из базы данных последовательность преобразовать к IEnumerable<Тип> и тогда всё получается без ошибок выполнения.

var qProd = repository.Products. AsEnumerable<Product>(). Select((p, idx) => new { index = idx, nam = p.Name });
foreach (var anonObj in qProd)
{
Console.WriteLine("idex = {0} Название = {1}", anonObj.index, anonObj.nam);
};
...
Рейтинг: 0 / 0
Linq - вторая форма Select
    #38939814
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так Базиль вам так и написал. Используя AsEnumerable вы переходите от Linq to EF к Linq to Objects.
...
Рейтинг: 0 / 0
Linq - вторая форма Select
    #38939828
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer, это называется материализация - то есть инициация выполнения SQL запроса и получение данных. В данном случае это правильный прием.

Кстати что касается поддерживаемых/неподерживаемых методов класса Enumerable, то это описано в MSDN на отдельных страницах:

LINQ to SQL: Standard Query Operator Translation (LINQ to SQL) + Data Types and Functions

EF: Supported and Unsupported LINQ Methods (LINQ to Entities)
...
Рейтинг: 0 / 0
Linq - вторая форма Select
    #38939856
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

Ну тут про себя только и могу сказать: "Если ничего не помогает, то читайте документацию!"
;-)
...
Рейтинг: 0 / 0
Linq - вторая форма Select
    #38947340
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileValGer, это называется материализация - то есть инициация выполнения SQL запроса и получение данных. В данном случае это правильный прием.

Давно хотел спросить - а как быть, когда данных много, а методы транслировать не получается? Операции с датой, со строками, например...
...
Рейтинг: 0 / 0
Linq - вторая форма Select
    #38947802
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique, мне непонятен твой вопрос.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq - вторая форма Select
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]