Как использовать условия использования в LINQ To DataSets - PullRequest
0 голосов
/ 24 августа 2010

У меня есть DataTable, содержащий несколько записей.Исходя из некоторых условий, я должен отфильтровать записи в две таблицы данных.

Скажите

When row["ItemType"]==1
     //Insert item into DataTable 1
When row["ItemType"]==2
     //Insert item into DataTable 2
Else
     //Insert item into DataTable 3

Как это сделать в LINQ для DataTable, который содержит все записи?

1 Ответ

0 голосов
/ 24 августа 2010

LINQ - это язык запросов, предназначенный для операций чтения. Вы не можете выполнить операцию вставки в запросе LINQ. Что вы можете сделать, это создать три LINQ-запроса и выполнять их итерацию отдельно:

var rows1 = from row in rows where row["ItemType"] == 1 select row;
var rows2 = from row in rows where row["ItemType"] == 2 select row;
var rows3 = from row in rows where row["ItemType"] == 3 select row;

foreach (var row in rows1) { /* Insert item into DataTable1 */ }
foreach (var row in rows2) { /* Insert item into DataTable2 */ }
foreach (var row in rows3) { /* Insert item into DataTable3 */ }

<ч /> Обновление:

Или, когда вы можете сделать это в одном операторе LINQ, вы можете сделать это:

var rows =
    from row in rows 
    select new { Row = row, Item =  row["ItemType"] };

foreach (var row in rows)
{
    switch (row.Item)
    {
        case 1:
            // Insert item into DataTable1
            break;
        case 2:
            // Insert item into DataTable2
            break;
        case 3:
            // Insert item into DataTable3
            break;
    }
}

Обновление: еще один вариант:

var rows =
    from row in rows
    select new
    {
        Row = row, 
        Table = row["ItemType"] == 1 ? table1 : 
            (row["ItemType"] == 2 ? table2 : table3)
    };

foreach (var row in rows)
{
    var table = row.Table;
    var row = row.Row;

    table.Rows.Add(row);
}
...