2015-08-03 2 views
2

Я пытаюсь использовать выражение LINQ для преобразования каждой строки в DataTable в запись в объекте List.Метод выбора DataTable «не предназначен для использования»?

Мой код:

DataTable dataTable = dataSet.Tables[0]; 

var intList = new List<int>(dataTable.AsEnumerable().Select(row => int.Parse(row["IntColumn"].ToString()))); 

Это на самом деле работает, когда я запускаю код, но я обеспокоен тем, что, когда я наведите курсор мыши на мое использование .select() Я вижу это (Примечание: Я использую ReSharper 8.2.2000.5102):

Resharper tooltip for .Select()

Та часть, которая касается меня это, «Этот API поддерживает платформу .NET Framework инфраструктуру и не предназначен для использования непосредственно из вашего кода.»

Мой вопрос: как мне это сделать, если я не должен использовать реализацию EnumerableRowCollection .Select()?

+2

Возможно вставить '.ToList()' между перечислимым и select. –

+0

@RonBeyer Это работает наверняка, но все же кажется странным, что я должен был бы это сделать. –

+2

Похоже, что это не '.Select', который считается API, его' EnumerableRowCollection' сам. Вы также можете преобразовать это в запрос LINQ, что-то вроде 'var intList = (от r в dataTable.AsEnumerable() выберите int.Parse (r [" IntColumn "]. ToString())). ToList()', который должен устранить предупреждение также. –

ответ

3

Перечисляемая коллекция строк отмечена как «Внутренний класс API» (https://msdn.microsoft.com/en-us/library/bb907979(v=vs.110).aspx), поэтому вы получаете это «предупреждение», потому что оно включено в документацию.

Ряд выборок также обозначается как «Внутренний API», в частности тот, который вы используете. Либо вы должны преобразовать его в список с .ToList() до выбора, или вы можете написать запрос LINQ, как:

var intList = (from r in dataTable.AsEnumerable() 
       select int.Parse(r["IntColumn"].ToString())).ToList() 

Вы также можете использовать один из Select заявлений, не помеченных как API, в частности, :

Select<TRow, TResult>(Func<TRow, TResult>) 
Select<TRow, TResult>(Func<TRow, Int32, TResult) 

Или одна из названных перегрузок. Подробнее см. Связанную документацию. Его трудно заставить его от одной перегрузки к другой, потому что многие из перегрузок содержат одну и ту же подпись, так что это может быть проблемой.

 Смежные вопросы

  • Нет связанных вопросов^_^