What is the scope of a lambda variable in C#?
c#, lambda, scope
Solution
The brackets give the clue - the lambda variable is captured in the scope of where it's declared:
.Where(o => ... olist.Where(o1 => ...).Max(o1 => ...))
// |----------------------------------------------| scope of o
// |---------| scope of first o1
// |---------| scope of second o1
Note that there's no overlap for the two `o1` variables, but they both overlap (or shadow) the `o` variable and hence can't use the same name.
Problem
I'm confused about the scope of the lambda variable, take for instance the following ``` var query = from customer in clist from order in olist .Where(o => o.CustomerID == customer.CustomerID && o.OrderDate == // line 1 olist.Where(o1 => o1.CustomerID == customer.CustomerID) // line 2 .Max(o1 => o1.OrderDate) // line 3 ) select new { customer.CustomerID, customer.Name, customer.Address, order.Product, order.OrderDate }; ``` In line 1 I have declare a lambda variable 'o' which means I cannot declare it again in line 2 (or at least the compiler complains if I try to) But it doesn't complain about line 3 even though 'o1' already exists?? What is the scope of a lambda variable?