Прочтите этот замечательный пост в DLINQ от ScottGu
Dynamic LINQ (Часть 1. Использование библиотеки динамических запросов LINQ)
Вам потребуется что-то вроде
var product = myobject.Where("Cost <= 10000");
var product = myobject.Where("Name = @0", strName);
Если вы скачали образцы, вам нужно найти файл Dynamic.cs
в образце.Вам нужно скопировать этот файл в свой проект, а затем добавить using System.Linq.Dynamic;
в класс, в котором вы пытаетесь использовать Dynamic Linq.
РЕДАКТИРОВАТЬ: Чтобы ответить на ваши изменения.Да, конечно, разница в производительности.Если вы заранее знаете варианты фильтров, я бы посоветовал записать их без использования DLINQ.
Вы можете создать свой собственный метод расширения следующим образом.
public static class FilterExtensions
{
public static IEnumerable<T> AddFilter<T,T1>(this IEnumerable<T> list, Func<T,T1, bool> filter, T1 argument )
{
return list.Where(foo => filter(foo, argument) );
}
}
Затем создайте свои методы фильтрации.
public bool FilterById(Foo obj, int id)
{
return obj.id == id;
}
public bool FilterByName(Foo obj, string name)
{
return obj.name == name;
}
Теперь вы можете использовать его на IEnumerable<Foo>
очень легко.
List<Foo> foos = new List<Foo>();
foos.Add(new Foo() { id = 1, name = "test" });
foos.Add(new Foo() { id = 1, name = "test1" });
foos.Add(new Foo() { id = 2, name = "test2" });
//Example 1
//get all Foos's by Id == 1
var list1 = foos.AddFilter(FilterById, 1);
//Example 2
//get all Foo's by name == "test1"
var list2 = foos.AddFilter(FilterByName, "test1");
//Example 3
//get all Foo's by Id and Name
var list1 = foos.AddFilter(FilterById, 1).AddFilter(FilterByName, "test1");