C# 从数据库到Linq where子句获取值
我有一个名为C# 从数据库到Linq where子句获取值,c#,sql,sql-server,linq,linq-to-entities,C#,Sql,Sql Server,Linq,Linq To Entities,我有一个名为filter\u LINKLER的表,列的名称是 身份证 SEF_网址 条件 比如说, ID=1 SEF_URL=“test/” 条件=“库存>50”` 我想得到linq where子句的条件部分 var product = (from d in db.PRODUCTS where *CONDITIONS from DB* select new ProductModel
filter\u LINKLER
的表,列的名称是
- ID=1
- SEF_URL=“test/”
- 条件=“库存>50”`
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
我编辑是因为“问题解决了”。
解决方案:
下载安装包System.Linq.Dynamic-Version 1.0.7(said me@steup)
然后添加到类中
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。虽然没有神奇的说法,但它说使用这个。您必须编写一个扩展,该扩展能够表示数据库中写入的条件,并返回一个谓词,然后可以在where子句中使用该谓词。。这是一个使用
动态LINQ
库的代码示例:
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 = 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);
更新:
动态查询
DynamicQueryable
类dynamicquery
IQueryable
一起使用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");
更新2:
您可以通过NuGet下载库动态查询。因此,您不应在项目中创建类:
您是否在询问如何动态添加条件?使用扩展方法而不是查询语法,并在.Where()
调用中传递所需的任何条件。例如if(useColor){query=query.Where(product=>product.Color='Red');}
这个STOCK
在您的条件中来自哪里?是的,我想动态添加,但它必须来自数据库,因为条件可能会改变。这取决于顾客。其中一个想要库存>50,其他人想要productName='test'。我想写一个通用的代码。你能给我举个例子吗?@AnilSengul你可以从这篇文章中挑选一些想法-不起作用。“无法从system.linq.expressions.expression转换为system.func”收到错误消息。@AnilSengul请查看我的更新答案。您应该创建一个类来处理动态查询。我只是想添加一些小东西。我必须为这件小事加课。还有其他方法吗?属性和常量必须是动态的。这些都在同一条线上是的,对我来说已经足够了。问题解决了。谢谢你的回答。我通过编辑我的问题分享了上述解决方案。