中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linq怎么實現組合

發布時間:2021-12-02 09:20:13 來源:億速云 閱讀:163 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關linq怎么實現組合,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

之前被誤導,說是linq怎么實現組合捏?因為linq是預編譯滴,沒有辦法想拼一個sql字符串出來,讓我糾結很久,但是,我覺得微軟的人應該比較厲害,所以我本著“有困難要上,沒有困難制造困難也要上”的原則,在還沒有熟悉LINQ TO ADO.NET的情況下,我覺得決定在最近的我自己獨立完成小項目里使用ASP.NET MVC + ADO.NET EF。一般的信息系統都有一個組合查詢的功能,我很快用jquery做了這樣一個功能。

這個表單將組合條件提交后臺,我先將它封裝成條件對象的數組:

  1. publicclassCondition  

  2. {  

  3. ///<summary> 

  4. ///字段  

  5. ///</summary> 

  6. publicstringField{get;set;}  

  7. ///<summary> 

  8. ///表達式  

  9. ///</summary> 

  10. publicstringOperator{get;set;}  

  11. ///<summary> 

  12. ///值  

  13. ///</summary> 

  14. publicstringValue{get;set;}  

  15. ///<summary> 

  16. ///關系  

  17. ///</summary> 

  18. publicstringRelation{get;set;}  

  19.  

  20. ///<summary> 

  21. ///  

  22. ///</summary> 

  23. ///<paramnameparamname="fileds"></param> 

  24. ///<paramnameparamname="operators"></param> 

  25. ///<paramnameparamname="values"></param> 

  26. ///<paramnameparamname="relations"></param> 

  27. ///<returns></returns> 

  28. publicstaticCondition[]BuildConditions(string[]fileds,
    string[]operators,string[]values,string[]relations)  

  29. {  

  30. if(fileds==null||operators==null||values==null||relations==null)  

  31. {  

  32. returnnull;  

  33. }  

  34. Condition[]conditions=newCondition[fileds.Length];  

  35. try  

  36. {  

  37. for(inti=0;i<conditions.Length;i++)  

  38. {  

  39. conditions[i]=newCondition()  

  40. {  

  41. Field=fileds[i],  

  42. Operator=operators[i],  

  43. Value=values[i],  

  44. Relation=relations[i]  

  45. };  

  46. }  

  47. }  

  48. catch  

  49. {  

  50. returnnull;  

  51. }  

  52. returnconditions;  

  53. }  

實際上,編譯器是把Linq表達式編譯成expression tree的形式,我只需要將條件對象數組轉換為expression tree就可以了。

我先將一個條件轉化為一個簡單的expression。

privatestaticExpressionConditonToExpression(Conditioncondition,Expressionparameter)  {  Expressionexpr=null;  Typetype=typeof(EDM_Resource);   PropertyInfopi=type.GetProperty(condition.Field);  ExpressionExpressionleft=Expression.Property(parameter,pi);   objectvalue=Convert.ChangeType(condition.Value,pi.PropertyType);  ExpressionExpressionright=Expression.Constant(value);  switch(condition.Operator)  {  case"=":  expr=Expression.Equal(left,right);  break;  case"<":  expr=Expression.LessThan(left,right);  break;  case"<=":  expr=Expression.LessThanOrEqual(left,right);  break;  case">":  expr=Expression.GreaterThan(left,right);  break;  case">=":  expr=Expression.GreaterThanOrEqual(left,right);  break;  }  returnexpr;  }

然后組合,變成一個Linq表達式,追加到where上。

  1. publicIList<EDM_Resource>FindByGroup(EDM_ResGroupresGroup,
    Condition[]conditions,intfirst,intlimit,outintcount)  

  2. {  

  3. using(ShengjingEDM2Entitiescontext=newShengjingEDM2Entities())  

  4. {  

  5. IQueryable<EDM_Resource>result=DoFindByGroup(resGroup,context);  

  6. ParameterExpressionparameter=Expression.Parameter(typeof(EDM_Resource),"r");  

  7. Expressionbody=null;  

  8.  

  9. if(conditions!=null&&conditions.Length>0)  

  10. {  

  11. body=ConditonToExpression(conditions[0],parameter);  

  12. for(inti=1;i<conditions.Length;i++)  

  13. {  

  14. Expressionright=ConditonToExpression(conditions[i],parameter);  

  15. body=conditions[i-1].Relation.ToUpper().Equals("AND")?  

  16. Expression.And(body,right):  

  17. Expression.Or(body,right);  

  18. }  

  19. }  

  20.  

  21. if(body!=null)  

  22. {  

  23. Expression<Func<EDM_Resource,bool>>expr=Expression.
    Lambda<Func<EDM_Resource,bool>>(body,parameter);  

  24. resultresult=result.Where<EDM_Resource>(expr);  

  25. }  

  26. resultresult=result.OrderByDescending<EDM_Resource,int>(r=>r.ResourceID);  

  27. count=result.Count<EDM_Resource>();  

  28. returnresult  

  29. .Skip<EDM_Resource>(first)  

  30. .Take<EDM_Resource>(limit)  

  31. .ToList<EDM_Resource>();  

  32. }  

關于“linq怎么實現組合”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥棱县| 南雄市| 无棣县| 綦江县| 雅江县| 平顺县| 温泉县| 新蔡县| 彭阳县| 天等县| 晋城| 瑞金市| 康定县| 喀什市| 右玉县| 娄底市| 永德县| 革吉县| 辛集市| 普洱| 游戏| 曲周县| 湟中县| 河西区| 横山县| 开平市| 巩义市| 房产| 惠水县| 卫辉市| 抚宁县| 疏附县| 濮阳市| 专栏| 开江县| 通榆县| 方正县| 永登县| 诏安县| 府谷县| 怀安县|