您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何解決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è)資訊頻道!
免責(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)容。