views:

2225

answers:

3

Hi,

Say i need to filter a generic list with a dynamic query (List<string> l; var x = l.Where(*dynamic query*))

How would i do this using LINQ? (Currently using a row filter on a dataview)

I've seen a posting by scott g: but it appears to not work with objects that use IEnumerable (generic lists included)

Can anyone offer any ideas?

+3  A: 

You can use the FindAll() method which takes a predicate. Here is a basic example.

List<string> stringList = new List<string>(new string[]{"Smith", "Johnson", "Jordan","Doe"});

List<string> filteredStringList = stringList.FindAll(x => x == "Smith");

Also the Find method returns a single item.

There is also an example project on MSDN for executing dynamic LINQ queries on both IEnumerable and IQueryable. You can reuse the DynamicQueryable class from it. Here is the link. The project is inside the C# samples project.

CoderGuy
+4  A: 

Assuming you mean a string-based query: the dynamic LINQ library will work fine; just call .AsQueryable() first:

string s = *dynamic query*
var qry = l.AsQueryable().Where(s);

This gives you an IQueryable<T> wrapper around your list, which provides access to the dynamic LINQ extension methods.

Marc Gravell
A: 

Perfect, thanks

maxp
this should be a comment, not an answer
Jeff
otherwise it's split from it's context as other answers are added
Jeff