从数据库获取价值到 Linq where 子句
Get value from Database to Linq where clause
我有一个名为 FILTRE_LINKLER
的 table,列的名称是
- ID
- SEF_URL
- 条件
例如,
- ID=1
- SEF_URL="test/"
- 条件="STOCK>50"`
我想将条件部分添加到 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);
更新:
首先你应该下载一个代码使用 Dynamic queries
by this link.
然后使用项目DynamicQueryable
classDynamic Query
然后使用 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:
我有一个名为 FILTRE_LINKLER
的 table,列的名称是
- ID
- SEF_URL
- 条件
例如,
- ID=1
- SEF_URL="test/"
- 条件="STOCK>50"`
我想将条件部分添加到 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);
更新:
首先你应该下载一个代码使用
Dynamic queries
by this link.然后使用项目
DynamicQueryable
classDynamic Query
然后使用
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: