Как создать запрос LINQ из строки?
Я новичок в LINQ и действительно нуждаюсь в помощи с некоторым кодированием.
На данный момент у меня есть строка и переменные var.
string temp = "from product in myEntities.Products where product.Name.Contains(_Name) select product";
var _Products = temp;
LvProducts.DataSource = _Products;
LvProducts.DataBind();
В принципе, я хочу, чтобы создать пользовательский/сложный запрос LINQ, предварительно назначив его в строку. После того как вы закончили с составлением, я назначаю строку в переменную var. Однако это явно не сработает. Поэтому может ли кто-нибудь помочь мне в этом?
Ответы
Ответ 1
У вас есть несколько вариантов:
-
Используйте Динамический Linq.
библиотеки для создания запросов на
муха. Лучшее место для
началось, прочитав блог ScottGu
запись. Однако я не думаю
эти библиотеки поддерживают
метод в вашем примере. Здесь
сообщение в блоге, объясняющее, как добавить
эта поддержка.
-
Непосредственно выполнять SQL. Ознакомьтесь с документами MSDN для Linq to Sql или Linq to Entities.
var _Products = myEntities.ExecuteStoreQuery<Product>
(@"SELECT * FROM Products WHERE [Name] In ('Item1', 'Item2')");
-
Использовать Linq композиционное поведение. Это может быть не самое элегантное решение, но оно работает очень хорошо, если у вас нет слишком много вариантов. Вы можете просто создать свой запрос в нескольких частях.
var _Products = from product in myEntities.Products
select product
_Products = from product in _Products
where product.Name.Contains(_Name)
select product
if FilterByPrice {
_Products = from product in _Products
where product.Price > 100
select product
}
Ответ 2
Вы можете сделать это, скомпилировав этот Linq в некотором С# с помощью CodeDomProvider - Добавление функций сценариев в .NET-приложения - но это довольно тяжеловесное решение. Если вы хотите больше узнать, как это сделать, взгляните на LinqPad - http://www.linqpad.net - автор предлагает вам использовать декомпилятор, чтобы увидеть, как это работает!
Если требование просто до простого, где предложения, чем альтернатива, могут заключаться в использовании Dynamic Linq - см. записи Scott Gu и пример кода от Microsoft - http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
Ответ 3
Возможно, это может помочь вам
http://nlinq.codeplex.com/
BR.
Ответ 4
Большая часть причин, по которым вы используете LINQ, в первую очередь, заключается в получении запросов, проверенных с помощью компилятора, которые wil ldetect ошибок во время компиляции. Это приведет к поражению этой цели, поскольку строка будет проанализирована во время выполнения.
Для ваших нужд у вас есть два варианта:
1) Выполнение запроса eSQL и запуск его в ObjectContext. Используя это, вы все равно можете использовать свои объекты, такие как myEntities.Products, и вернуть список продуктов.
2) Используя обычный SQL-запрос и используйте ObjectContext для вызова этого непосредственно к базовой базе данных.
Ответ 5
Я предполагаю, что вам придется использовать динамическое выполнение кода. Для получения дополнительной информации взгляните на сообщение Ricks на west-wind.
Ответ 6
вы думаете об этом как о динамическом SQL, где вы создаете оператор как строку и анализируете его как инструкцию SQL.
Поскольку вы уже находитесь в коде, почему бы не сделать правильные заявления. Было бы намного проще использовать Lambda вместо традиционного linq. мои 2 цента.