实体框架使用表达式动态构建Where子句

用户

使用Entity Framework C#并进行以下查询,我需要其中的内容:

where x.Login_Status == "Submitted"

充满活力。在不同情况下,它可能是“ Submitted”,null或其他东西,而不是在其中编写带有不同查询的多个if语句,而是希望在where子句中有一个谓词。

status = (from x in ctx.table
          where x.Login_Status == "Submitted"
          orderby x.SUB_DATE descending
          select new Model_Table()
          {
              Id = x.ID,
              Name = x.NAME,
              Code = x.Code,
              DateSubmitted = x.SUB_DATE
           }).ToList<Model_Table>();

那可能吗?

解决方案:

在if语句中,当遇到更多参数时使用此语句

where_expression = x => x.Login_Status == "Submitted" || x.Login_Status == null;

这是一个对我有用的完整代码,方括号之间的所有内容都将替换为适合您的代码:

Expression<Func<[Replace with your Entity], bool>> where_submitted = x => x.Login_Status == "Submitted";

// Check if all selected
if (CheckBox_Show_All_Submitted.Checked)
{
    where_submitted = x => x.Login_Status == "Submitted" || x.Login_Status == null;
}

status = 
    ctx.[Replace with your Entity Table]
    .Where(where_submitted)
    .OrderByDescending(x => x.SUB_DATE)
    .Select(x => new Model_Table
        {
           Id = x.ID,
           Name = x.NAME,
           Code = x.Code,
           DateSubmitted = x.SUB_DATE
        }).ToList<Model_Table>();
雅库布·马萨德(Yacoub Massad)

您需要一个Expression<Func<Entity,bool>>,而不是一个Predicate<Entity>区别在于谓词是编译后的委托,而表达式是将代码作为数据,因此可以转换为SQL。

这是一个例子:

//You can have this expression have different values based on your logic
Expression<Func<Entity,bool>> where_expression = x => x.Login_Status == "Submitted";

var query =
    ctx.Table
    .Where(where_expression)
    .OrderByDescending(x => x.SUB_DATE)
    .Select(x => new Model_Table())
    {
        Id = x.ID,
        Name = x.NAME,
        Code = x.Code,
        DateSubmitted = x.SUB_DATE
   }).ToList();        

请注意,您需要替换Entity为真实类的名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用实体框架的SQL IN子句的动态linq查询表达式树

来自分类Dev

实体框架6在带lambda表达式的where子句中使用父代

来自分类Dev

动态为EF Where()子句构建表达式树

来自分类Dev

如何使用表达式构建动态查询(IN子句)

来自分类Dev

使用 Linq 在 WHERE 子句中构建 OR 表达式

来自分类Dev

存储库中实体框架中where子句中的复杂表达式

来自分类Dev

如何在实体框架中动态构造Where表达式?

来自分类Dev

为LINQ to Entities Where子句构建表达式树

来自分类Dev

为LINQ to Entities Where子句构建表达式树

来自分类Dev

LINQ表达式-动态的From和Where子句

来自分类Dev

LINQ表达式-动态的From和Where子句

来自分类Dev

如何使用表达式使用Where和OR构建动态查询

来自分类Dev

loopbackjs where子句,表达式使用列值

来自分类Dev

带.Where子句的Lambda表达式,使用包含

来自分类Dev

使用表达式<Func <>>和<T>的Where子句

来自分类Dev

使用列值的表达式的loopbackjs where子句

来自分类Dev

在Where子句的lambda表达式中使用if / else

来自分类Dev

通用orderby子句的动态表达式

来自分类Dev

使用表达式树构建动态选择

来自分类Dev

Lambda表达式Where子句

来自分类Dev

实体框架where子句

来自分类Dev

实体框架 6:针对 DB 动态构建搜索子句

来自分类Dev

如何在实体框架中动态构造按表达式排序?

来自分类Dev

实体框架核心和Cosmos DB。使用LINQ表达式读取实体

来自分类Dev

动态构建表达式树

来自分类Dev

动态构建表达式树

来自分类Dev

动态构建表达式树

来自分类Dev

如何在高性能的实体框架上使用lambda表达式

来自分类Dev

如何使用Lambda表达式进行单元测试实体框架/存储库模式

Related 相关文章

热门标签

归档