从数据库获取价值到 Linq where 子句

Get value from Database to Linq where clause

我有一个名为 FILTRE_LINKLER 的 table,列的名称是

  1. ID
  2. SEF_URL
  3. 条件

例如,

我想将条件部分添加到 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。

我编辑是因为 "Problem Solved"。 解决方案:

下载安装包System.Linq.Dynamic - 版本 1.0.7(@StepUp 说的) 然后添加到 class

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);

你问的是将数据库中存在的条件动态转换为linq中的where。虽然没有神奇的声明,但说使用它。您将必须编写一个能够解释写入数据库的条件的扩展和 returns 一个谓词,然后您可以在 where 子句中使用该谓词。

Try to use 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 by this link.

  2. 然后使用项目DynamicQueryableclassDynamic 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:

如果不想添加class,then you can use an 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:

您可以通过 NuGet 下载库 Dynamic query。所以你不应该在你的项目中创建 classes: