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
的表,列的名称是

  • 身份证
  • SEF_网址
  • 条件
  • 比如说,

    • ID=1
    • SEF_URL=“test/”
    • 条件=“库存>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

    我编辑是因为“问题解决了”。 解决方案:

    下载安装包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请查看我的更新答案。您应该创建一个类来处理动态查询。我只是想添加一些小东西。我必须为这件小事加课。还有其他方法吗?属性和常量必须是动态的。这些都在同一条线上是的,对我来说已经足够了。问题解决了。谢谢你的回答。我通过编辑我的问题分享了上述解决方案。