Como posso fazer enumeráveis ??DataTable?
-
22-07-2019 - |
Pergunta
Eu não posso usar AsEnumerable () no DataTable, eu estou usando C # 3, mas eu só estou alvejando quadro 2.0 (capacidade LINQ é cortesia de LINQBridge ). Existe alguma maneira eu posso fazer enumeráveis ??DataTable sem usar Select ()?
bool isExisting = (bdsAttachments.DataSource as DataTable).Select().Any(xxx => (string)dr["filename"] == filename);
Update:
Eu queria que torná-lo parecido com este:
bool isExisting = (bdsAttachments.DataSource as DataTable).AsEnumerable().Any(xxx => (string)dr["filename"] == filename);
Estou recebendo uma suspeita de que o método Select de DataTable retorna uma cópia, eu estou pensando apenas usar AsEnumerable, o problema é que eu só sou alvo Framework 2.0, System.Data.DataSetExtensions não está disponível
BTW, eu tentei isso: http: / /cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx , mas tem erros de compilação.
Solução
public static IEnumerable<DataRow> EnumerateRows(this DataTable table)
{
foreach (var row in table.Rows)
{
yield return row;
}
}
Permite-lhe chamar:
bool isExisting = (bdsAttachments.DataSource as DataTable).EnumerateRows().Any(dr => (string)dr["filename"] == filename);
Outras dicas
-
IEnumerable<DataRow> rows = dataTable.AsEnumerable();
(System.Data.DataSetExtensions.dll) -
IEnumerable<DataRow> rows = dataTable.Rows.OfType<DataRow>();
(System.Core.dll)
Mantendo seu recenseador estritamente 2.0:
public static IEnumerable<DataRow> getRows(DataTable table)
{
foreach (DataRow row in table.Rows)
{
yield return row;
}
}
Em seguida, chamar com LINQBridge assim:
bool isExisting = getRows(bdsAttachments.DataSource as DataTable).Any(row => (string)row["filename"] == filename);
Você pode tentar lançar o DataTable como IEnumerable e iterar sobre o conjunto:
//your data exists as a DataTable
DataTable dt = (DataTable)bdsAttachments.DataSource;
foreach (DataRow row in dt)
{
if (row["filename"] == filename)
return row;
}
O foreach irá percorrer a lista e pesquisar do nome do arquivo (eu suponho que você está procurando o primeiro DataRow com esse nome, nem todas as linhas que correspondem o nome do arquivo).