Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I make DataTable enumerable?

I cannot use AsEnumerable() on DataTable, I'm using C# 3 but I'm just targeting 2.0 framework (LINQ capability is courtesy of LINQBridge). Is there any way I can make DataTable enumerable without using Select() ?

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

Update:

I wanted it to make it look like this:

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

I'm getting an inkling that the Select method of DataTable returns a copy, I'm thinking to just use AsEnumerable, the problem is I'm just targeting 2.0 framework, System.Data.DataSetExtensions is not available

BTW, i tried this: http://cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx, but has compilation errors.

like image 347
Hao Avatar asked Jun 25 '09 02:06

Hao


People also ask

What is AsEnumerable in c#?

AsEnumerable() in C# To cast a specific type to its IEnumerable equivalent, use the AsEnumerable() method. It is an extension method. The following is our array − int[] arr = new int[5]; arr[0] = 10; arr[1] = 20; arr[2] = 30; arr[3] = 40; arr[4] = 50; Now, get the IEnumerable equivalent.

Can we use LINQ to query against a DataTable?

Can we use linq to query against a DataTable? Explanation: We cannot use query against the DataTable's Rows collection, since DataRowCollection doesn't implement IEnumerable<T>. We need to use the AsEnumerable() extension for DataTable.

What is AsEnumerable in vb net?

AsEnumerable: casts a collection to IEnumerable of same type. This Lambda Expression sample casts array of strings to its corresponding IEnumerable. This Lambda Expression sample casts array of strings to its corresponding IEnumerable.

Which method creates a DataTable from an existing one and includes the data?

Copy() creates a new DataTable with the same structure and data as the original DataTable.


2 Answers

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

Allows you to call:

bool isExisting = (bdsAttachments.DataSource as DataTable).EnumerateRows().Any(dr => (string)dr["filename"] == filename);
like image 163
Timothy Carter Avatar answered Sep 28 '22 00:09

Timothy Carter


  1. IEnumerable<DataRow> rows = dataTable.AsEnumerable(); (System.Data.DataSetExtensions.dll)
  2. IEnumerable<DataRow> rows = dataTable.Rows.OfType<DataRow>(); (System.Core.dll)
like image 27
abatishchev Avatar answered Sep 28 '22 00:09

abatishchev