【发布时间】:2019-06-15 16:35:52
【问题描述】:
我有一个名为FILTRE_LINKLER 的表,列的名称是
- 身份证
- SEF_URL
- 条件
例如,
- ID=1
- SEF_URL="test/"
- CONDITIONS="STOCK>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”隐式转换为布尔值。
我编辑是因为“问题已解决”。 解决方案:
下载安装包 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);
【问题讨论】:
-
你问的是如何动态添加条件?使用扩展方法而不是查询语法,并在
.Where()调用中传递您想要的任何条件。例如if (useColor) { query=query.Where(product=>product.Color='Red'); } -
这个
STOCK在你的CONDITIONS中来自哪里? -
是的,我想动态添加,但它必须来自数据库,因为条件可以改变。这取决于客户。其中一个想要 Stock>50,而其他人想要 productName='test'。我想写一个代码通用用法。
标签: c# sql sql-server linq linq-to-entities