我有一个名为FILTRE_LINKLER
的表,列的名称为
例如
我想在linq where子句中获得CONDITIONS部分。
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);
答案 0 :(得分:1)
您要的是将数据库中存在的条件动态转换为linq中的位置。虽然没有魔术的说法,那就说使用它。您将必须编写一个扩展程序,该扩展程序可以解释数据库中编写的条件并返回一个谓词,然后可以在where子句中使用它。
答案 1 :(得分:0)
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
中的Dynamic 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:
如果您不想添加课程,请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
。因此,您不应在项目中创建类: