Je dois faire un syndicat sur 3 jeux de champs qui se répètent, je dois les rejoindre tout en un résultat unique en provenant de: à: p> ID | NAME | DESC
3 Réponses :
Vous pouvez utiliser SELECTMANY Pour créer un tableau avec 3 éléments pour chaque enregistrement:
table.SelectMany(row => new [] { new { ID = row.ID1, NAME = row.NAME1, DESC = row.DESC1 }, new { ID = row.ID2, NAME = row.NAME2, DESC = row.DESC2 }, new { ID = row.ID3, NAME = row.NAME3, DESC = row.DESC3 } });
Bien que les autres méthodes proposées puissent fonctionner, c'est le moyen le plus simple de le faire avec un type de données entrant.
Comment allez-vous initialiser les nouveaux objets de datarow sans mentionner explicitement l'objet de données (exemple: DT.Newrow ()). @Alan pourriez-vous expliquer comment utiliserez-vous l'exemple de réponse dans votre situation.
En supposant que vous avez ces classes: vous pouvez faire quelque chose comme: p> et si vous n'avez besoin que si vous n'avez besoin que de distincts ligne em> s Vous pouvez utiliser distinct () em> p> p>
concat code> dans
linq code> équivaut à un syndicat tout dans SQL.
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID1", typeof(int)));
dt.Columns.Add(new DataColumn("ID2", typeof(int)));
DataRow row = dt.NewRow();
[0] = 1;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = 2;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = 3;
dt.Rows.Add(row);
row = dt.NewRow();
row[1] = 1;
dt.Rows.Add(row);
row = dt.NewRow();
row[1] = 4;
dt.Rows.Add(row);
var tbl1 = dt.AsEnumerable().Where(t => !t.IsNull("ID1")).CopyToDataTable();
tbl1.Columns.Remove("ID2");
tbl1.Columns["ID1"].ColumnName = "ID";
var tbl2 = dt.AsEnumerable().Where(t => !t.IsNull("ID2")).CopyToDataTable();
tbl2.Columns.Remove("ID1");
tbl2.Columns["ID2"].ColumnName = "ID";
var query = tbl1.AsEnumerable().Concat(tbl2.AsEnumerable());