溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決Linq多條件組合問(wèn)題

發(fā)布時(shí)間:2021-12-01 10:36:53 來(lái)源:億速云 閱讀:121 作者:小新 欄目:編程語(yǔ)言

這篇文章主要為大家展示了“如何解決Linq多條件組合問(wèn)題”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何解決Linq多條件組合問(wèn)題”這篇文章吧。

多種查詢?cè)u(píng)價(jià)的條件:

1.Linq多條件之查詢類型:

收到的評(píng)價(jià)_買(mǎi)家給我的評(píng)價(jià),收到的評(píng)價(jià)_賣家給我的評(píng)價(jià),給出的評(píng)價(jià)_我給買(mǎi)家的評(píng)價(jià),給出的評(píng)價(jià)_我給賣家的評(píng)價(jià)

public enum OpinionSearchType  {     收到的評(píng)價(jià)_買(mǎi)家給我的評(píng)價(jià) = 0,      收到的評(píng)價(jià)_賣家給我的評(píng)價(jià) = 1,      給出的評(píng)價(jià)_我給買(mǎi)家的評(píng)價(jià) = 2,      給出的評(píng)價(jià)_我給賣家的評(píng)價(jià) = 3  }

2.Linq多條件之評(píng)價(jià)類型:

全部,好評(píng),中評(píng),差評(píng)

public enum OpinionType  {     全部 = 0,     好評(píng) = 1,     中評(píng) = 2,     差評(píng) = 3  }

3.Linq多條件之評(píng)價(jià)查詢時(shí)間:

全部,一個(gè)星期內(nèi),一個(gè)月以內(nèi),六個(gè)月以內(nèi),六個(gè)月以外

public enum OpinionTime  {       全部 = 0,       一個(gè)星期內(nèi) = 1,       一個(gè)月以內(nèi) = 2,       六個(gè)月以內(nèi) = 3,       六個(gè)月以外 = 4  }

由于緩存的需要,要把Expression完成之后再傳到接口那邊獲取相應(yīng)的List<評(píng)價(jià)意見(jiàn)>.按照這樣的看的話,

總共3個(gè)條件, 13個(gè)子條件, 排列組合之后, 會(huì)有80種的組合. - - 真的一個(gè)個(gè)組合去寫(xiě)的話,還真是累死人了..

左思右想,***的方法就是把3個(gè)條件都拆開(kāi)來(lái),完成不同的Expression,到***再把三個(gè)條件組合在一起成為一個(gè)新的Expression.網(wǎng)上找到的比較都只是單條件的Parameter, 查了MSDN,才知道有個(gè)Expression.And(left, right)可以完成我的需求.利用.net3.5的擴(kuò)展方法寫(xiě)成了一個(gè)組合Expression的方法,再重載了幾個(gè)多參數(shù)的表達(dá)式,如下:

#region 表達(dá)式  public static Expression ContactExpressions(this Expression exp, params Expression[] exps) {      foreach (var e in exps) {           if (null == e) continue;            exp = Expression.And(exp, e);        }        return exp;    }    public static Expression<Func> ContactExpressions(this Expression exp, params Expression[] exps) {      foreach (var e in exps) {           if (null == e) continue;          exp = Expression.And(exp, e);      }       return (Expression<Func>)exp;   }    public static Expression<Func> ContactExpressions(this Expression exp, params Expression[] exps) {      foreach (var e in exps) {           if (null == e) continue;           exp = Expression.And(exp, e);       }       return (Expression<Func>)exp;   }   public static Expression<Func> ContactExpressions(this Expression exp, params Expression[] exps) {       foreach (var e in exps) {          if (null == e) continue;           exp = Expression.And(exp, e);      }       return (Expression<Func>)exp;   }      public static Expression<Func> ContactExpressions(this Expression exp, params Expression[] exps) {       foreach (var e in exps) {           if (null == e) continue;           exp = Expression.And(exp, e);      }       return (Expression<Func>)exp;   }     #endregion

有了這幾個(gè)方法進(jìn)行Linq多條件查詢,原本的需求就可以迎刃而解了:

Expression<Func<split_Opinion, bool>> expSearchType = null;   Expression<Func<split_Opinion, bool>> expOpinionType = null;  Expression<Func<split_Opinion, bool>> expOpinionTime = null;  switch (searchType) {      case OpinionSearchType.給出的評(píng)價(jià)_我給買(mǎi)家的評(píng)價(jià):          expSearchType = Y => Y.UserID == userID && !Y.IsSeller;           break;      case OpinionSearchType.給出的評(píng)價(jià)_我給賣家的評(píng)價(jià):        expSearchType = Y => Y.UserID == userID && Y.IsSeller;          break;       case OpinionSearchType.收到的評(píng)價(jià)_買(mǎi)家給我的評(píng)價(jià):          expSearchType = Y => Y.ToUserID == userID && !Y.IsSeller;          break;      case OpinionSearchType.收到的評(píng)價(jià)_賣家給我的評(píng)價(jià):          expSearchType = Y => Y.ToUserID == userID && !Y.IsSeller;           break;   }   switch (opinType) {       case OpinionType.好評(píng):           expOpinionType = Y => Y.OpinionType == 0;           break;      case OpinionType.中評(píng):           expOpinionType = Y => Y.OpinionType == 1;           break;       case OpinionType.差評(píng):           expOpinionType = Y => Y.OpinionType == 2;           break;   }    switch (opinTime) {       case OpinionTime.一個(gè)星期內(nèi):           expOpinionTime = Y => (DateTime.Now - Y.OpinionTime).Days <= 7;           break;       case OpinionTime.一個(gè)月以內(nèi):           expOpinionTime = Y => (DateTime.Now - Y.OpinionTime).Days <= 30;           break;       case OpinionTime.六個(gè)月以內(nèi):           expOpinionTime = Y => (DateTime.Now - Y.OpinionTime).Days <= 180;           break;       case OpinionTime.六個(gè)月以外:           expOpinionTime = Y => (DateTime.Now - Y.OpinionTime).Days > 180;           break;   }    //GetPaged(params) 這個(gè)方法是用來(lái)獲取列表并支持緩存保存的.   return GetPaged(expSearchType.ContactExpressions<split_Opinion, bool>(expOpinionType, expOpinionTime),       userID.UserTablePrefx(), true, pageIndex, pageSize);

以上是“如何解決Linq多條件組合問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI