سؤال

أنا لا يمكن استخدام AsEnumerable() على DataTable, أنا باستخدام C# 3 ولكن أنا فقط استهداف 2.0 إطار (LINQ القدرة هو من باب المجاملة LINQBridge).هل هناك أي طريقة يمكن أن تجعل DataTable enumerable دون استخدام اختيار() ?

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

تحديث:

أردت أن تجعل الأمر يبدو مثل هذا:

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

أنا أفهم أن حدد طريقة DataTable يعود نسخة, أنا أفكر فقط استخدام AsEnumerable المشكلة أنا فقط استهداف 2.0 إطار النظام.البيانات.DataSetExtensions غير متوفر

راجع للشغل, حاولت هذا: http://cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx, ولكن لديه أخطاء التحويل البرمجي.

هل كانت مفيدة؟

المحلول

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

ويتيح لك الاتصال على:

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

نصائح أخرى

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

والحفاظ على العداد الخاص بك بدقة 2.0:

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

وثم استدعاء مع linqbridge مثل هذا:

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

ويمكنك محاولة صب DataTable وكما IEnumerable وتكرار عبر مجموعة:

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

وسوف foreach تكرار خلال قائمة وبحثا عن اسم الملف (أفترض أنك تبحث عن DataRow الأول مع أن اسم الملف، وليس كافة الصفوف التي تطابق اسم الملف).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top