簡體   English   中英

如何在C#中使用謂詞來避免和或條件

[英]How to use predicate in c# to avoid and or conditions

var queryableDcbooking = (from t in dcBookingEntities.Bookings
  join t1 in dcBookingEntities.BookingWorkFlowStatusMasters on t.BookingWorkFlowStatusId equals t1.BookingWorkFlowStatusId
  join t2 in dcBookingEntities.StatusMasters on t.StatusId equals t2.StatusId
  join t3 in dcBookingEntities.PNBStatusMasters on t.PNBStatusId equals t3.PNBStatusId into gj
  from pnb in gj.DefaultIfEmpty()
  where (
  (paraName.ToLower() == Comparator.Bookingid && intSearch.Contains(t.BookingId))
  || (paraName.ToLower() == Comparator.Dccode && strSearch.Contains(t.DCMaster.DCCode))
  || (paraName.ToLower() == Comparator.Supplierid && intSearch.Contains(t.SupplierId))
  || (paraName.ToLower() == Comparator.Doorid && intSearch.Contains(t.DoorId))
  || (paraName.ToLower() == Comparator.Carrierid && intSearch.Contains(t.CarrierId))
  || (paraName.ToLower() == Comparator.Buyer && strSearch.Contains(t.Buyer))
  )

paraName是通過bookingIddccode字符串搜索的,而intSearch包含多個bookingids

我可以在Linq查詢中使用謂詞來避免和/或使用此代碼中的條件嗎?

您可以只在確定要使用的參數的方法中構建表達式:

private Expression<Func<Foo, bool>> GetExpression(string param, string searchTerm)
{
    switch (param)
    {
        case "bar":
            return f => f.Bar.Contains(searchTerm);
        case "baz":
            return f => f.Baz.Contains(searchTerm);
        // ...
    }
}

然后這樣稱呼它:

var bars = (from c in collection select c).Where(GetExpression(param, searchTerm));

暫無
暫無

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

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