Gescucht LINQ ausdruck Inhalt von zwei DataTable vergleichen:

18/11/2008 - 15:16 von Michael Böckinghoff | Report spam
Hallo NG,

ich habe folgende foreach schleife , (in der ein Unterschied gesucht wird),
die ich gerne mit einem LINQ ausdruck packen möchte:

foreach (DataRow xRow in changesDataTable.Rows)
{
// Suche diese Row in dem dtAktuellInDb und vergleiche anschließende alle
columns
string strExpr = string.Format("[ID] = '{0}'", xRow["ID"]);
DataRow[] searchedRows = dtAktuellInDb.Select(strExpr);
//jetzt in der ersten row alle columns vergleichen
for (int i = 0; i < searchedRows[0].ItemArray.Length; i++)
{
if (xRow[i].ToString() != searchedRows[0][i].ToString())
{
// unterschied wurde gefunden also true
return true;
}
}
}

ich habe schon mit Intersect die schnittmenge von beiden DataTablen aber
komm
damit noch nicht wirklich weiter

var schnittMenge =
dtAktuellInDb.AsEnumerable().Intersect(changesDataTable.AsEnumerable(),
DataRowComparer.Default);

Jetzt müsste ich irgendwie die schnittMenge mit changesDataTable auf
unterschieden in den Rows Columns vergleichen...


TIA

Michael
 

Lesen sie die antworten

#1 Michael Böckinghoff
18/11/2008 - 16:17 | Warnen spam
"Michael Böckinghoff" schrieb im Newsbeitrag
news:%23Jps$

Hab es jetzt so gelöst, zwar auch noch recht lang der Ausdruck aber
villeicht besser wartbar:

// per LINQ nach unterschieden in den Spalten
Sende_Werte Empfangs_Werte und Kommentar suchen!
// Beispiel von Codeproject wurde hier benutzt:
http://www.codeproject.com/KB/linq/...asets.aspx

var orig = dtAktuellInDb.AsEnumerable();
var updated = changesDataTable.AsEnumerable();

var updRec = from u in updated
join o in orig
on u.Field<string>("ID")
equals o.Field<string>("ID")
where (u.Field<string>("Sende_Werte") !=
o.Field<string>("Sende_Werte"))
||(u.Field<string>("Empfangs_Werte") !=
o.Field<string>("Empfangs_Werte"))
||(u.Field<string>("Kommentar") !=
o.Field<string>("Kommentar"))
select new
{
prim_key = u.Field<string>("ID"),
field1 =
u.Field<string>("Sende_Werte"),
field2 =
u.Field<string>("Empfangs_Werte"),
field3 = u.Field<string>("Kommentar")
};

if (updRec != null)
return true;

Ähnliche fragen