Come posso rendere enumerabile DataTable?
-
22-07-2019 - |
Domanda
Non riesco a utilizzare AsEnumerable () su DataTable, sto usando C # 3 ma sto solo prendendo di mira il framework 2.0 (la funzionalità LINQ è fornita da LINQBridge ). Esiste un modo per rendere enumerabile DataTable senza usare Select ()?
bool isExisting = (bdsAttachments.DataSource as DataTable).Select().Any(xxx => (string)dr["filename"] == filename);
Aggiornamento:
Volevo che fosse così:
bool isExisting = (bdsAttachments.DataSource as DataTable).AsEnumerable().Any(xxx => (string)dr["filename"] == filename);
Ho capito che il metodo Select di DataTable restituisce una copia, sto pensando di usare AsEnumerable, il problema è che sto solo prendendo di mira il framework 2.0, System.Data.DataSetExtensions non è disponibile
A proposito, ho provato questo: http: / /cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx , ma presenta errori di compilazione.
Soluzione
public static IEnumerable<DataRow> EnumerateRows(this DataTable table)
{
foreach (var row in table.Rows)
{
yield return row;
}
}
Ti permette di chiamare:
bool isExisting = (bdsAttachments.DataSource as DataTable).EnumerateRows().Any(dr => (string)dr["filename"] == filename);
Altri suggerimenti
-
IEnumerable<DataRow> rows = dataTable.AsEnumerable();
(System.Data.DataSetExtensions.dll) -
IEnumerable<DataRow> rows = dataTable.Rows.OfType<DataRow>();
(System.Core.dll)
Mantenere il proprio enumeratore rigorosamente 2.0:
public static IEnumerable<DataRow> getRows(DataTable table)
{
foreach (DataRow row in table.Rows)
{
yield return row;
}
}
Quindi chiama con linqbridge in questo modo:
bool isExisting = getRows(bdsAttachments.DataSource as DataTable).Any(row => (string)row["filename"] == filename);
Puoi provare a trasmettere DataTable come IEnumerable e iterare sul set:
//your data exists as a DataTable
DataTable dt = (DataTable)bdsAttachments.DataSource;
foreach (DataRow row in dt)
{
if (row["filename"] == filename)
return row;
}
Il foreach scorrerà l'elenco e la ricerca del nome file (suppongo che stai cercando il primo DataRow con quel nome file, non tutte le righe che corrispondono al nome file).