From: Paul on 16 Feb 2010 04:22
How can I send the result of a LINQ query to a BindingList?
I say not to do this:
<Customer> List lst = (from cust in select new dataContext.Customer
Customer (cust)). ToList <Customer> ();
foreach (Customer c in lst) lbindingListCust.Add (c);
From: Peter Duniho on 16 Feb 2010 04:45
> How can I send the result of a LINQ query to a BindingList?
> I say not to do this:
> <Customer> List lst = (from cust in select new dataContext.Customer
> Customer (cust)). ToList <Customer> ();
That doesn't even look to me like it would compile.
> foreach (Customer c in lst) lbindingListCust.Add (c);
If you've already converted the query result to a List<Customer> (i.e.
using ToList() as in your example), then this would be better:
BindingList<Customer> lbindingListCust = new BindingList<Customer>(lst);
But if you have no other reason to convert the query to a List<Customer>
instance, then creating the intermediate list is wasteful. Rather, you
might as well in fact explicitly execute the add in your own code:
// Assume original data source named "data"
IEnumerable<Customer> result = from cust in data select new
BindingList<Customer> lbindingListCust = new BindingList<Customer>()
foreach (Customer c in result)
Unfortunately, the BindingList<T> class does not support initializing
with a known capacity. If it did and if, as your example suggests, you
are not doing any filtering, just a projection, _and_ your original data
source has a known length, then you could improve the above a little by
pre-allocating the capacity of your output list to the correct size.
Note that if you anticipate that optimization to actually be important
(it's a relatively minor one, but you never know�it could be in some
cases), then you could write your own IBindingList implementation that
That's a lot more work though; I would not bother with that approach
unless and until you have identified a genuine performance problem just
using the built-in BindingList<T> class.