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.

War es hilfreich?

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top