Запросы внутри набора данных C # - PullRequest
3 голосов
/ 31 марта 2011

У меня есть набор данных ADO.NET, который задается определенным запросом, скажем,

SELECT ID,USER,PRODUCT,COUNT FROM PRODUCTION

Без использования оператора where мне нужно получить некоторые результаты из набора данных.Скажем, я хочу получить количество пользователей и продуктов пользователя, который имеет максимальное количество продуктов.(И я хочу сделать это, используя существующий набор данных. Я не могу получить это из набора данных.)

Есть идеи о способе запроса внутри набора данных?Так как есть Datatables, я думал, что есть какой-то способ сделать это.

Ответы [ 3 ]

8 голосов
/ 31 марта 2011

Традиционные запросы SQL не могут быть применены к DataSet.Следующие возможны , однако:

  • Фильтрация строк с использованием DataTable.Select.См. здесь для получения подробной информации о выражениях в DataTables.
  • Рассчитайте итоги и т. Д., Используя DataTable.Compute.
  • Если эти два не делаютхитрость, всегда есть LINQ.

Пример быстрого и грязного LINQ: (который не возвращает DataTable, но список, содержащий анонимный тип):

var joinedResult = dataTable1
  // filtering:
  .Select("MyColumn = 'value'")
  // joining tables:
  .Join(
    dataTable2.AsEnumerable(), 
    row => row.Field<long>("PrimaryKeyField"), 
    row => row.Field<long?>("ForeignKeyField"),
    // selecting a custom result:
    (row1, row2) => new { AnotherColumn = row1.Field<string>("AnotherColumn") });

AsEnumerable преобразует DataTable в IEnumerable, для которого могут выполняться запросы LINQ.Если вы новичок в LINQ, ознакомьтесь с этим введением .

2 голосов
/ 31 марта 2011

Да, вы можете использовать DataTable.Select метод.

DataTable table = DataSet1.Tables["Orders"];
    // Presuming the DataTable has a column named Date.
    string expression;
    expression = "Date > #1/1/00#";
    DataRow[] foundRows;

    // Use the Select method to find all rows matching the filter.
    foundRows = table.Select(expression);

    // Print column 0 of each returned row.
    for(int i = 0; i < foundRows.Length; i ++)
    {
        Console.WriteLine(foundRows[i][0]);
    }

Также см. эту ссылку .

0 голосов
/ 12 октября 2012

Вы можете выполнять кросс-таблицы запросов объекта набора данных, используя LINQ to DataSet:

msdn.microsoft.com / en-us / library / bb386969.aspx

...