簡體   English   中英

創建Linq表達式(合並表達式)

[英]Create Linq Expression ( Combine Expressions )

我正在使用帶有C#lang的實體框架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();

如果這是專門用於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();

*編輯

您可以嘗試使用此第三方庫PredicateBuilder http://www.albahari.com/nutshell/predicatebuilder.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM