Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top