Получить значение из базы данных в Linq, где предложение - PullRequest
0 голосов
/ 22 января 2019

У меня есть таблица с именем FILTRE_LINKLER и имена столбцов

  1. ID
  2. SEF_URL
  3. УСЛОВИЯ

Например,

  • ID = 1
  • SEF_URL = "test /"
  • УСЛОВИЯ = "СТОК> 50" '

Я хочу получить условие CONDITIONS в предложение linq where.

var product = (from d in db.PRODUCTS
                       where *CONDITIONS from DB*
                       select new ProductModel
                       {
                           Description= d.DESCRIPTION,
                           Brand= d.BRANDS.BRAND,
                           SefUrl = sef_url,
                           Name= d.NAME,

                       });

Я пытаюсь это:

var query = db.FILTRE_LINKLER.Select(x => x.CONDITIONS);
 var product = (from d in db.PRODUCTS
                       where query
                       select new ProductModel
                       {
                           Description= d.DESCRIPTION,
                           Brand= d.BRANDS.BRAND,
                           SefUrl = sef_url,
                           Name= d.NAME,

                       });

Но у меня есть ошибка, которая не может неявно преобразовать тип 'System.Linq.IQueryable' в bool.

Я редактировал, потому что "Проблема решена". Для решения:

Скачать Install-Package System.Linq.Dynamic -Version 1.0.7 (сказал мне @StepUp) затем добавьте в класс

using System.Linq.Dynamic;

затем следующий код:

 var whereCondition = db.FILTRE_LINKLER.Select(x => x.CONDITIONS).FirstOrDefault();
var product = (from d in db.PRODUCTS
                       where query
                       select new ProductModel
                       {
                           Description= d.DESCRIPTION,
                           Brand= d.BRANDS.BRAND,
                           SefUrl = sef_url,
                           Name= d.NAME,

                       }).Where(whereCondition);

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Попробуйте использовать Dynamic LINQ.Это пример кода с использованием библиотеки Dynamic LINQ:

var query = northwind.Products
                         .Where("CategoryID = 3 AND UnitPrice > 3")
                         .OrderBy("SupplierID");

В вашем случае:

var whereCondition = db.FILTRE_LINKLER.Select(x => x.CONDITIONS).FirstOrDefault();
var product = (from d in db.PRODUCTS
                   select new ProductModel
                   {
                       Description= d.DESCRIPTION,
                       Brand= d.BRANDS.BRAND,
                       SefUrl = sef_url,
                       Name= d.NAME,

                   })
              .Where(whereCondition);

ОБНОВЛЕНИЕ:

  1. Сначала вы должны скачать код для использования Dynamic queries по этой ссылке .

  2. Затем использовать DynamicQueryable класс из проекта Dynamic Query

  3. Тогда используйте ваши динамические запросы с IQueryable<T>.

Позвольте мне показать пример:

var persons = new List<Person>()
{
    new Person(){Id = 1, FirstName = "1"},
    new Person(){Id = 2, FirstName = "2"},
    new Person(){Id = 3, FirstName = "3"}
};
var personWithIdTwo = persons
   .AsQueryable()
   .Where("Id==2");

ОБНОВЛЕНИЕ 1:

Если вы не хотите добавлять класс, , тогда вы можете использовать Expression Tree.

Пример дерева выражений:

var propName = "STOCK"; // here you assign any value
var constValue = "50";  // here you assign any value
var param = Expression.Parameter(typeof(ProductModel), "p");
var exp = Expression.Lambda<Func<ProductModel, bool>>(
    Expression.GreaterThan(
       Expression.Property(param, propName),
       Expression.Constant(constValue)
    ),
    param
);
var product = (from d in db.PRODUCTS
                   where query
                   select new ProductModel
                   {
                       Description= d.DESCRIPTION,
                       Brand= d.BRANDS.BRAND,
                       SefUrl = sef_url,
                       Name= d.NAME,

                   }).Where(exp);

ОБНОВЛЕНИЕ 2:

Вы можете загрузить библиотеку Dynamic query через NuGet.Поэтому вам не следует создавать классы в вашем проекте:

enter image description here

0 голосов
/ 22 января 2019

То, что вы запрашиваете, - это динамическое преобразование условий, присутствующих в базе данных, в положение linqПока нет волшебного утверждения, что говорит, используйте это.Вам нужно написать расширение, которое сможет интерпретировать условия, записанные в вашей базе данных, и вернуть предикат, который вы затем сможете использовать в предложении where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...