LINQ-запрос к DataTable

Когда вы создаете массив, вы не получаете экземпляр NSArray. Обычно вы получаете NSCFArray, хотя есть и другие частные классы, такие как __NSArrayM и т. Д.

Это потому, что NSArray является кластером класса .

972
задан Peter Mortensen 4 July 2014 в 20:44
поделиться

6 ответов

Вы не можете запросить против DataTable строки набор, так как DataRowCollection не реализует IEnumerable<T>. Необходимо использовать AsEnumerable() расширение для DataTable. Как так:

var results = from myRow in myDataTable.AsEnumerable()
where myRow.Field<int>("RowNo") == 1
select myRow;

И поскольку Keith говорит, необходимо будет добавить ссылку на [1 112] Система. Данные. Возвраты DataSetExtensions

AsEnumerable() IEnumerable<DataRow>. Если необходимо преобразовать IEnumerable<DataRow> в DataTable, используйте CopyToDataTable() расширение.

Ниже запрос с Лямбда-выражением,

var result = myDataTable
    .AsEnumerable()
    .Where(myRow => myRow.Field<int>("RowNo") == 1);
1227
ответ дан Harald Coppoolse 4 July 2014 в 20:44
поделиться

Можно использовать LINQ для объектов на наборе строк, как так:

var results = from myRow in myDataTable.Rows where myRow.Field("RowNo") == 1 select myRow;
15
ответ дан David Wengier 4 July 2014 в 20:44
поделиться

Не то, чтобы им сознательно не позволили на DataTables, это просто, что DataTables предшествуют IQueryable и универсальным конструкциям IEnumerable, на которых могут быть выполнены запросы Linq.

Оба интерфейса требуют некоторой проверки безопасности типов вида. DataTables не со строгим контролем типов. Это - та же причина, почему люди не могут запросить против ArrayList, например.

Для Linq для работы необходимо отобразить результаты против безопасных с точки зрения типов объектов и запрос против этого вместо этого.

66
ответ дан Jon Limjap 4 July 2014 в 20:44
поделиться

Поскольку @ch00k сказал:

using System.Data; //needed for the extension methods to work

...

var results = 
    from myRow in myDataTable.Rows 
    where myRow.Field<int>("RowNo") == 1 
    select myRow; //select the thing you want, not the collection

также необходимо добавить ссылку проекта к System.Data.DataSetExtensions

48
ответ дан Keith 4 July 2014 в 20:44
поделиться
var results = from DataRow myRow in myDataTable.Rows
    where (int)myRow["RowNo"] == 1
    select myRow
126
ответ дан JoelFan 5 July 2014 в 07:44
поделиться
  • 1
    Обратите внимание, что Snezee7 требует таблицы поиска на 266 МБ. – David M 13 May 2010 в 20:33
var query = from p in dt.AsEnumerable()
                    where p.Field<string>("code") == this.txtCat.Text
                    select new
                    {
                        name = p.Field<string>("name"),
                        age= p.Field<int>("age")                         
                    };

поля имени и возраста теперь являются частью объекта запроса и доступны следующим образом: Console.WriteLine (query.name);

37
ответ дан 19 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: