2010-08-24 13 views
0

J'ai un DataTable contenant des enregistrements. En fonction de certaines conditions, je dois filtrer les enregistrements dans deux bases de données.Comment utiliser les conditions de cas dans LINQ To DataSets

Say

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

Comment le faire dans LINQ pour un DataTable qui contient tous les enregistrements?

Répondre

0

LINQ est un langage de requête destiné aux opérations de lecture. Vous ne pouvez pas effectuer une opération d'insertion dans une requête LINQ. Ce que vous pouvez faire est de créer trois requêtes LINQ et itérer sur eux séparément:

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 */ } 


Mise à jour:

Ou quand vous pouvez faire le faire en une seule déclaration LINQ, vous pouvez le faire:

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

Mise à jour: Une autre option:

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

ne signifie donc ce, Nous C annot fait tout le processus dans une seule déclaration Linq? –

+0

@Shantanu: Oui, vous pouvez écrire une seule instruction LINQ. Voir ma mise à jour – Steven

+0

ce n'est pas celui que je m'attendais. Cela aurait pu être fait sans utiliser linq aussi bien je pense. –