日期:2014-05-20  浏览次数:20991 次

多表查询对应的Lambda表达式如何写呢?
现在有个问题,想解决动态根据所选字段,关联两表查询
但事先两表的结构是不知道的,只是知道所选字段一定存在

两表如下:

            DataTable dt_A = new DataTable();
            dt_A.Columns.Add("Name", typeof(string));
            dt_A.Columns.Add("Age", typeof(int));

            DataTable dt_B = new DataTable();
            dt_B.Columns.Add("Name", typeof(string));
            dt_B.Columns.Add("Age", typeof(int));


            dt_A.Rows.Add("Kitty", 12);
            dt_A.Rows.Add("Tom", 24);
            dt_A.Rows.Add("Kelly", 22);

            dt_B.Rows.Add("Kitty", 12);
            dt_B.Rows.Add("Tom", 27);
            dt_B.Rows.Add("Jhon", 22);



单表查询,
var singleQuery = dt_A.AsEnumerable().Where(stu => stu.Field<int>("Age") > 20).Select(stu => stu);



这个Lambda表达式是:
stu => stu.Field<int>("Age") > 20


但是,假如我我想两表查询:

传统写法是:

            var doubleQuery = from a in dt_A.AsEnumerable()
                              from b in dt_B.AsEnumerable()
                              where a.Field<string>("Name") == b.Field<string>("Name") &&
                                    a.Field<int>("Age") != b.Field<int>("Age")
                              select new
                              {
                                  Name = a.Field<string>("Name"),
                                  A_Age = a.Field<int>("Age"),
                                  B_Age = b.Field<int>("Age")