0
votes

LINQ Union tout le même jeu de données?

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: xxx pré>

à: p>

ID  |  NAME | DESC


0 commentaires

3 Réponses :


1
votes

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


2 commentaires

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.



0
votes

En supposant que vous avez ces classes: xxx

vous pouvez faire quelque chose comme: xxx

et si vous n'avez besoin que si vous n'avez besoin que de distincts ligne s Vous pouvez utiliser distinct ()


0 commentaires

0
votes

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


0 commentaires