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);
}
ne signifie donc ce, Nous C annot fait tout le processus dans une seule déclaration Linq? –
@Shantanu: Oui, vous pouvez écrire une seule instruction LINQ. Voir ma mise à jour – Steven
ce n'est pas celui que je m'attendais. Cela aurait pu être fait sans utiliser linq aussi bien je pense. –