How can I convert IEnumerable<T> to List<T> in C#?
I am using LINQ to query a generic dictionary and then use the result as the datasource for my ListView (WebForms).

Simplified code:

    Dictionary<Guid, Record> dict = GetAllRecords();
    myListView.DataSource = dict.Values.Where(rec => rec.Name == "foo");
    myListView.DataBind();

I thought that would work but in fact it throws a **System.InvalidOperationException**: 
> ListView with id 'myListView' must
> have a data source that either
> implements ICollection or can perform
> data source paging if AllowPaging is
> true.

In order to get it working I have had to resort to the following:

    Dictionary<Guid, Record> dict = GetAllRecords();
    List<Record> searchResults = new List<Record>();
    
    var matches = dict.Values.Where(rec => rec.Name == "foo");
    foreach (Record rec in matches)
        searchResults.Add(rec);
    
    myListView.DataSource = searchResults;
    myListView.DataBind();

Is there a small gotcha in the first example to make it work?

(Wasn't sure what to use as the question title for this one, feel free to edit to something more appropriate)



How can I convert IEnumerable<T> to List<T> in C#?
===

I am using LINQ to query a generic dictionary and then use the result as the datasource for my ListView (WebForms).

Simplified code:

    Dictionary<Guid, Record> dict = GetAllRecords();
    myListView.DataSource = dict.Values.Where(rec => rec.Name == "foo");
    myListView.DataBind();

I thought that would work but in fact it throws a **System.InvalidOperationException**: 
> ListView with id 'myListView' must
> have a data source that either
> implements ICollection or can perform
> data source paging if AllowPaging is
> true.

In order to get it working I have had to resort to the following:

    Dictionary<Guid, Record> dict = GetAllRecords();
    List<Record> searchResults = new List<Record>();
    
    var matches = dict.Values.Where(rec => rec.Name == "foo");
    foreach (Record rec in matches)
        searchResults.Add(rec);
    
    myListView.DataSource = searchResults;
    myListView.DataBind();

Is there a small gotcha in the first example to make it work?

(Wasn't sure what to use as the question title for this one, feel free to edit to something more appropriate)


