Pregunta

No puedo usar AsEnumerable () en DataTable, estoy usando C # 3 pero solo estoy apuntando al framework 2.0 (la capacidad de LINQ es cortesía de LINQBridge ). ¿Hay alguna manera de hacer que DataTable sea enumerable sin usar Select ()?

bool isExisting = (bdsAttachments.DataSource as DataTable).Select().Any(xxx => (string)dr["filename"] == filename);

Actualización:

Quería que se viera así:

bool isExisting = (bdsAttachments.DataSource as DataTable).AsEnumerable().Any(xxx => (string)dr["filename"] == filename);

Recibo una idea de que el método Select de DataTable devuelve una copia, estoy pensando en usar AsEnumerable, el problema es que solo estoy apuntando al marco 2.0, System.Data.DataSetExtensions no está disponible

Por cierto, probé esto: http: / /cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx , pero tiene errores de compilación.

¿Fue útil?

Solución

    public static IEnumerable<DataRow> EnumerateRows(this DataTable table)
    {
        foreach (var row in table.Rows)
        {
            yield return row;
        }
    }

Le permite llamar:

bool isExisting = (bdsAttachments.DataSource as DataTable).EnumerateRows().Any(dr => (string)dr["filename"] == filename);

Otros consejos

  1. IEnumerable<DataRow> rows = dataTable.AsEnumerable(); (System.Data.DataSetExtensions.dll)
  2. IEnumerable<DataRow> rows = dataTable.Rows.OfType<DataRow>(); (System.Core.dll)

Mantener su enumerador estrictamente 2.0:

public static IEnumerable<DataRow> getRows(DataTable table)
{
    foreach (DataRow row in table.Rows)
    {
        yield return row;
    }
}

Luego llame con linqbridge así:

bool isExisting = getRows(bdsAttachments.DataSource as DataTable).Any(row => (string)row["filename"] == filename);

Puede intentar convertir DataTable como IEnumerable e iterar sobre el conjunto:

//your data exists as a DataTable
DataTable dt = (DataTable)bdsAttachments.DataSource;
foreach (DataRow row in dt)
{
    if (row["filename"] == filename)
        return row;
}

El foreach recorrerá la lista y buscará el nombre del archivo (supongo que está buscando el primer DataRow con ese nombre de archivo, no todas las filas que coinciden con el nombre del archivo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top