Wie kann ich Datatable enumerable machen?
-
22-07-2019 - |
Frage
Ich kann nicht AsEnumerable () auf Datatable verwenden, ich bin mit C # 3, aber ich bin nur 2.0 Framework (LINQ Fähigkeit Targeting ist mit freundlicher Genehmigung von LINQBridge ). Gibt es eine Möglichkeit, Datatable enumerable ohne Select () machen?
bool isExisting = (bdsAttachments.DataSource as DataTable).Select().Any(xxx => (string)dr["filename"] == filename);
Update:
Ich wollte es es wie folgt aussehen:
bool isExisting = (bdsAttachments.DataSource as DataTable).AsEnumerable().Any(xxx => (string)dr["filename"] == filename);
Ich bin eine Ahnung davon bekommen, dass die Select-Methode des Datatable eine Kopie zurück, ich denke AsEnumerable nur zu verwenden, das Problem ist, ich bin 2.0 Framework nur Targeting, System.Data.DataSetExtensions nicht verfügbar ist
BTW, habe ich versucht, dies: http: / /cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx , hat aber Kompilierungsfehlern.
Lösung
public static IEnumerable<DataRow> EnumerateRows(this DataTable table)
{
foreach (var row in table.Rows)
{
yield return row;
}
}
Hier können Sie anrufen:
bool isExisting = (bdsAttachments.DataSource as DataTable).EnumerateRows().Any(dr => (string)dr["filename"] == filename);
Andere Tipps
-
IEnumerable<DataRow> rows = dataTable.AsEnumerable();
(System.Data.DataSetExtensions.dll) -
IEnumerable<DataRow> rows = dataTable.Rows.OfType<DataRow>();
(System.Core.dll)
Halten Sie Ihren enumerator streng 2.0:
public static IEnumerable<DataRow> getRows(DataTable table)
{
foreach (DataRow row in table.Rows)
{
yield return row;
}
}
Dann rufen mit linqbridge wie folgt aus:
bool isExisting = getRows(bdsAttachments.DataSource as DataTable).Any(row => (string)row["filename"] == filename);
Sie können versuchen, die Datatable als IEnumerable Gießen und iterieren den Satz:
//your data exists as a DataTable
DataTable dt = (DataTable)bdsAttachments.DataSource;
foreach (DataRow row in dt)
{
if (row["filename"] == filename)
return row;
}
Die foreach wird die Liste und die Suche nach dem Dateinamen durchlaufen (ich nehme an, Sie zum ersten DataRow mit dem Dateinamen suchen, nicht alle Zeilen, die den Dateinamen übereinstimmen).