I am trying to make a LINQ statement where the where clause comes from a variable. For example:
string whereClause = address.zip == 23456;
var x = from something in someList where whereClause;
Is this possible? I cannot seem to get it to work.
thanks,
Update - my where clause is predefined and will be based on user input so I don't think this will work for me. Basically whereClause is not constructed in the method, it is a parameter of the method which does the LINQ. I didn't explain that well here is a better example:
public void doLnq(string whereClause)
{
var x = from something in someList where whereClause;
dowork(x);
}
Update - Just to sum up some of the suggestions and centralize everything.
I cannot use a switch to generate the where clause because there are way to many possibilities.
The dynamic linq post that a few of you have posted does look promising but i am having trouble related the linq to sql example to my linq to objects problem.
and @sLaks after looking through msdn http://msdn.microsoft.com/en-us/library/bb353734.aspx I am having trouble figuring out where you meant to use AsQueryable
thanks,
You need to assembly an
Expression<Func<T, bool>>
and pass it to theWhere()
extension method:EDIT: If you're using LINQ to Objects, remove the word
Expression
to create an ordinary delegate.As Richard has pointed out, the Dynamic Query Library can be used to build dynamic filter expressions. When using Linq-To-Objects make sure to convert your
IEnumerable<T>
to aIQueryable<T>
first. Here is an (incomplete) example:This:
is shorthand for:
Assuming
someList
is anIEnumerable<Address>
,Where
refers to the Enumerable.Where Extension Method. This method expects aFunc<Address, bool>
which you can define as follows:That's a built-in Feature of LINQ. Just use the Where extension method.
See LINQ Query Syntax versus Method Syntax (C#) for more information.