2013-02-25 3 views
1

У меня есть DataSet, который содержит несколько DataTable, я хочу получить имена таблиц и отобразить их в поле со списком. Ниже код работает нормально, но как я могу преобразовать этот код в LINQ.Показать имена таблиц набора данных в combox с использованием LINQ

foreach (DataTable dt in objDataset.Tables) 
    { 
    cboTables.Items.Add(dt.TableName); 
    }  

здесь objDataset является DataSet, 'cboTables' является ComboBox из WPF

+0

Честно говоря, было бы рядом с тем же кодом или без LINQ. Вы не будете экономить время. – IronMan84

+0

Какую версию .Net вы используете? – sgeddes

ответ

2

Попробуйте это:

cboTables.ItemsSource = objDataset.Tables.OfType<DataTable>().Select(dt => dt.TableName); 
1

может быть это работает. Попробуй.

objDataset.Tables.ToList<DataTable>().ForEach(dt => { cboTables.Items.Add(dt.TableName) }); 
+0

Ошибка «System.Data.DataTableCollection» не содержит определения для «ForEach» и не используется метод расширения «ForEach», принимающий первый аргумент типа «System.Data.DataTableCollection» (вам не хватает использования директива или ссылка на сборку?) \t D: \ Path – user1523935

+0

попробуйте ToList перед каждым – SP007

1

Вот один из способов использования ForEach, но я бы не рекомендовал использовать его только использовать LINQ, как вы должны преобразовать вашу коллекцию с помощью ToList:

objDataset.Tables.ToList().ForEach(t => cboTables.Items.Add(t.TableName)); 
+0

Ошибка «System.Data.DataTableCollection» не содержит определения для «ForEach» и не использует метод расширения «ForEach», принимающий первый аргумент типа «System.Data.DataTableCollection» (вы не указали директиву использования или ссылку на сборку?) \t D: путь .......... – user1523935

+0

@ user1523935 - тогда вам, вероятно, нужно будет использовать .ToList() после. Таблицы - не иметь его передо мной или я мог бы проверить для вас. С наилучшими пожеланиями. – sgeddes

+0

Ошибка «System.Data.DataTableCollection» не содержит определения для «ToList», и не может быть найден метод расширения ToList, принимающий первый аргумент типа «System.Data.DataTableCollection» (вам не хватает использования директива или ссылка на сборку?) – user1523935

0

Почему даже использовать Еогеасп вобще выберите и установите его как элемент Items ComboBox.

cboTables.ItemsSource = objDataSet.Tables.OfType(). Выберите (dt => dt.TableName);

+0

Ошибка «System.Data.DataTableCollection» не содержит определения для «Выбрать» и не использует метод расширения «Выбрать», принимающий первый аргумент типа «System.Data.DataTableCollection», (вы не указали директиву использования или ссылку на сборку?) \t D: путь ........... – user1523935

+0

Добавили ли вы инструкцию using для System.Linq? – jfin3204

+0

Да, я уже добавил – user1523935

3
cboTables.Items.AddRange(objDataset.Tables.Cast<DataTable>().Select(iter => iter.TableName)); 
+0

Ошибка 'System.Windows.Controls.ItemCollection 'не содержит определения для' AddRange ', и никакой метод расширения' AddRange ', принимающий первый аргумент типа' System.Windows.Controls.ItemCollection ', может быть найден (вам не хватает директивы using или ссылки на сборку?) – user1523935

+0

Когда вы используете IEnumerable.Cast, он преобразует ICollection в IEnumerable. Таким образом, вы никогда не будете иметь эту проблему. Я думаю, что вам не хватает некоторых ссылок или использования старой .net-структуры. – Kamrul

+0

Я использую версию 4.0 – user1523935

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