<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      解析入口參數(shù)為實(shí)體的表達(dá)式樹

            在學(xué)習(xí)LINQ的時(shí)候碰到了解析表達(dá)式樹的問題,書上的例子中入口參數(shù)為一個(gè)單一變量,這個(gè)在MSDN中給出了示例代碼:

      MSDN官方示例:

      // Add the following using directive to your code file:
      // using System.Linq.Expressions;
      // Create an expression tree.
      Expression<Func<int, bool>> exprTree = num => num <5;
      // Decompose the expression tree.
      ParameterExpression param = (ParameterExpression)exprTree.Parameters[0];
      BinaryExpression operation
      = (BinaryExpression)exprTree.Body;
      ParameterExpression left
      = (ParameterExpression)operation.Left;
      ConstantExpression right
      = (ConstantExpression)operation.Right;
      Console.WriteLine(
      "Decomposed expression: {0} => {1} {2} {3}",
      param.Name, left.Name, operation.NodeType, right.Value);
      // This code produces the following output:
      // Decomposed expression: num => num LessThan 5

             這里表達(dá)式的入口參數(shù)是一個(gè)int型的變量,表達(dá)式左邊就是這個(gè)參數(shù)本身,右邊是一個(gè)常量,因此用

                    ParameterExpression left = (ParameterExpression)operation.Left;

                    ConstantExpression right = (ConstantExpression)operation.Right;

      來解析即可,但如果入口是一個(gè)實(shí)體呢,這種情況很常見,應(yīng)該怎么解析呢,通過向高人請教,最后用編譯表達(dá)式樹終于解決了這個(gè)問題:

       

          //實(shí)體類
          public class T
          {
              
      public int ID { getset; }
              
      public string Name { getset; }
          }

          
      //解析表達(dá)式樹類
          public class Test
          {
              
      public void ExpressionTest(Expression<Func<T, bool>> exprTree)
              {
                  ParameterExpression param 
      = (ParameterExpression)exprTree.Parameters[0];
                  BinaryExpression operation 
      = (BinaryExpression)exprTree.Body;
                  MemberExpression left 
      = (MemberExpression)operation.Left;
                  MemberExpression right 
      = (MemberExpression)operation.Right;

                  var result
      =Expression.Lambda(right).Compile().DynamicInvoke();
                  Console.WriteLine(
      "Decomposed expression:{0}=>{1} {2} {3}",
                      param.Name,left.Member.Name,operation.NodeType,result.ToString());
              }
          }

          
      //調(diào)用
          public class Program
          {
              
      static void Main(string[] args)
              {
                  Test test 
      = new Test();
                  T t 
      = new T() { ID = 1, Name = "abc" };
                  test.ExpressionTest(o 
      => o.ID == t.ID);
                  test.ExpressionTest(o 
      => o.Name == t.Name);            
                  Console.Read();
              }
          }

       運(yùn)行結(jié)果如下:

       

       

            園子中有位朋友提供了另外一種方法(http://home.cnblogs.com/q/22976/),不過那個(gè)方法有一定缺陷,要依賴于實(shí)體類型,如果像上面代碼中那樣把表達(dá)式做為一個(gè)參數(shù)就無能為力了。

      posted @ 2011-03-15 23:35  artwl  閱讀(520)  評論(1)    收藏  舉報(bào)

      個(gè)人簡介

      var ME = {
      	"name": "土豆/Artwl",
      	"job": "coding",
      	"languages": [
      		"JS", "HTML",
                      "CSS", "jQuery"
      		"MVC",".NET",
      		"設(shè)計(jì)模式"
      	],
      	"hobby": [
      		"閱讀", "旅游",
      		"音樂", "電影"
      	]
      }
      
      TOP
      主站蜘蛛池模板: 天堂V亚洲国产V第一次| 国产99在线 | 亚洲| 自拍偷自拍亚洲一区二区| 国产在线亚州精品内射| 高清性欧美暴力猛交| 蜜臀av久久国产午夜福利软件| 亚洲精品久久久久成人2007| 国产精品人伦一区二区三| 国产电影一区二区三区| av天堂久久天堂av| 波多野结衣网站| 亚洲一区二区精品另类| 色九月亚洲综合网| 国产97人人超碰CAO蜜芽PROM| 日日噜噜大屁股熟妇| 亚洲一区二区三上悠亚| 亚洲成人四虎在线播放| 深夜福利啪啪片| 亚洲国产精品线观看不卡| 亚洲另类丝袜综合网| 国产MD视频一区二区三区| 亚洲一区二区三区激情在线 | 国产又黄又爽又不遮挡视频| 亚洲午夜爱爱香蕉片| 成人午夜免费无码视频在线观看| gogogo在线播放中国| 国产日韩综合av在线| 人人做人人爽人人爱| 国产亚洲一区二区三区啪| 亚洲精品一区二区动漫| 亚洲一区二区三区啪啪| 乱码中文字幕| 国产美女高潮流白浆视频| 久久精品国产久精国产| 无码人妻一区二区三区在线视频 | 久久精品丝袜高跟鞋| 亚洲精品综合第一国产综合| 久久九九日本韩国精品| 亚洲精品乱码久久久久红杏| 国产乱老熟女乱老熟女视频| 欧美极品少妇×xxxbbb|