[英]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
是通過bookingId
, dccode
字符串搜索的,而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.