如何在LINQ to数据集中使用用例条件

如何在LINQ to数据集中使用用例条件,linq,datatable,dataset,linq-to-objects,Linq,Datatable,Dataset,Linq To Objects,我有一个包含一些记录的数据表。根据某些条件,我必须将记录过滤到两个数据表中 说 如何在LINQ中为包含所有记录的数据表执行此操作?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 sel

我有一个包含一些记录的数据表。根据某些条件,我必须将记录过滤到两个数据表中


如何在LINQ中为包含所有记录的数据表执行此操作?

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);
}

那么这是否意味着,我们不能以任何方式在单个Linq语句中完成整个过程?@Shantanu:是的,您可以编写单个Linq语句。查看我的更新。这不是我期望的。我想这也可以不用linq来完成。@Shantanu:当然不用linq也可以。事实上,没有LINQ:-)你什么都做不了。请记住,LINQ用于读取和转换数据,而不是用于突变数据。虽然从理论上讲,可能会滥用LINQ来编写查询,但不建议这样做,因为这样做会在查询中产生副作用。其他开发人员只是不影响LINQ查询而产生副作用。因此,当您想要将列表插入到数据表中时,需要迭代列表。
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);
}