代码之家  ›  专栏  ›  技术社区  ›  Shantanu Gupta

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

  •  0
  • Shantanu Gupta  · 技术社区  · 14 年前

    我有一个包含一些记录的数据表。根据某些条件,我必须将记录筛选为两个数据表。

    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中执行此操作?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Steven    14 年前

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