Как я могу извлечь список Tuple из конкретной таблицы с Entity Framework/LINQ?
Мне нужно извлечь список пара ID//Name из большой таблицы в С#.NET с Entity Framework.
Я пробую этот запрос:
List<Tuple<int, string>> list = (from res in db.Resource
select new Tuple<int, string>(res.Resource_ID, res.Name)).ToList();
Но, к сожалению, у меня есть эта ошибка:
В LINQ-объектах поддерживаются только конструкторы и инициализаторы без параметров.
Я не понимаю, как я могу извлечь этот список кортежей с этой структурой, и я немного потерял эту ошибку.
Можете ли вы помочь мне понять и решить мою проблему?
С уважением,
Алекс
Ответы
Ответ 1
Вы можете сделать это с помощью среднего шага, выбрав анонимный тип:
db.Resource.Select(x => new { x.Resource_ID, x.Name }).AsEnumerable().Select(x => Tuple.Create(x.Resource_ID, x.Name)).ToList();
Создание кортежа не поддерживается в Linq To Entities, поэтому вам нужно выбрать анонимный тип, который будет эквивалентен:
SELECT [Resource].[Resource_ID], [Resource].[Name]
затем перейдите в LINQ to Objects по AsEnumerable
и получите свой кортеж.
Ответ 2
Вы можете создать список из db.Resource
и использовать LINQ to Collections для удаления этого ограничения:
var list = db.Resource.ToList().Select(res => Tuple.Create(res.Resource_ID, res.Name));
В классе Tuple
есть некоторые конструкторы (до 8 элементов), но вспомогательный метод Create()
делает создание более прямой.