Как я могу извлечь список 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() делает создание более прямой.