创建Linq表达式(组合表达式)

本文关键字:表达式 组合 创建 Linq | 更新日期: 2023-09-27 18:22:10

我使用的是带有C#语言的实体框架6.1.3和.net框架4.5.1

我想做的是;我想把表达式和if-else语句结合起来
这是我的表情

Expression<Func<Article, bool>> expression = 
    q => (!newsDayStart.HasValue || q.PublishedOn >= newsDayStart) &&
         (!newsDayEnd.HasValue || q.PublishedOn <= newsDayEnd) &&
         (!categoryId.HasValue || q.CategoryId == categoryId.Value) &&
         (string.IsNullOrEmpty(searchText) || q.Title.Contains(searchText) &&
         (!isActive != null || q.IsActive == isActive.Value));

Expression<Func<Article, bool>> expression = ......;
if ( newsDayStart.HasValue )
{
   //Obviosly += this statement will not work.
   expression += q => q.PublishedOn > = newsDayStart
}
//TODO write other if else statements...
//Send expression
_context.Articles.Where(expression).Count();

创建Linq表达式(组合表达式)

如果这是专门用于EF查询的,那么您可能会发现链接Where()调用更容易达到同样的效果。

Expression<Func<Article, bool>> expression = ......;
//Send expression
var query = _context.Articles.Where(expression)
if ( newsDayStart.HasValue )
{
    query = query.Where(q => q.PublishedOn > = newsDayStart);
}
query.Count();

*编辑

您可以尝试使用此第三方库PredicateBuilderhttp://www.albahari.com/nutshell/predicatebuilder.aspx