当前位置:编程学习 > C#/ASP.NET >>

expression表达式树,部分查询,我快疯了,快来个人救一下.(附图)

还是部分查询,不想用Dynamic.cs,有多东西不方便.还是想自己写

 public class mytest
    {
       public string name{get;set;}
       public string nick { get; set; }
       public string id { get; set; }
        public mytest(string t1, string t2, string t3)
        {
            this.name = t1;
            this.nick = t2;
            this.id = t3;
        }

    }
上面是源数据的类了.
--------------------------------------
 List<mytest> mytests = new List<mytest> {new mytest("aa","aa","aa"),new mytest("bb","bb","bb"),new mytest("cc","cc","cc") };
建立源数据

  ParameterExpression param = Expression.Parameter(typeof(mytest), "x");
建立x
....后面没意义了.

 Expression<Func<mytest, object>> expr = x => new { x.name, x.nick, x.id };

想要自己拼上面的表达式.(这个是硬写的,想要动态拼出来.用Expression Visualizer查了一下.
大概结构如下图,



------割割割------------------------
已经折腾我两天了,请高手指点一下吧!
 NewExpression mynew=Expression.New(这里面该怎么写,
主要问题在


表达式树 --------------------编程问答--------------------

补个展开的全图吧 --------------------编程问答-------------------- 再补个描述吧.怕没有说清楚...

要求,select(动态列),多少列不确定.只查询表的部分! --------------------编程问答-------------------- ……可惜,我基本看不懂 --------------------编程问答-------------------- 写不了。

实际上
x => new { id = xxx, value = xxx };
C#编译器会为你产生一个类
我们假设叫
class AnonymousType_1
{
    public int id { get; private set; }
    public string value { get; private set; }
}
注意,这个类型是C#编译器在编译的时候产生的,效果和你在编码的时候手写一样。

而不是表达式树或者CLR在运行的时候产生的。

Expression.New只是调用构造函数而已,那是在类型确定的情况下,它没有创造一个类的功能。

退一万步讲,就算LINQ表达式可以运行时产生一个类型,你也只能用object接收,并且反射取属性。
object query = data.Select(MySelectExpr);
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,