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.

Foi útil?

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

  1. IEnumerable<DataRow> rows = dataTable.AsEnumerable(); (System.Data.DataSetExtensions.dll)
  2. 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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top