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

使用Linq如何
对于以下LINQ
C# code

        DataTable dt1=new DataTable();
        DataTable dt2 = new DataTable();
....
//DataTable 赋值,都有一个主键ID
....
        var result = from a in dt1.AsEnumerable()
                     join b in dt2.AsEnumerable()
                     on a.Field<int>("ID") equals
                     b.Field<int>("ID") 
                     select a;


DataTable 中只有主键ID是已知的,其它列的名称未知,关联查询后,如何返回a与b关联后的结果(包括a和b的字段信息)。类似于SQL中二个表Inner join的结果。

------解决方案--------------------

------解决方案--------------------
from a in dt1.AsEnumerable()
join b in dt2.AsEnumerable()
on a.Field<int>("ID") equals
b.Field<int>("ID") 
select new 
{
列名1=a.你需要的列1,
列名2=a.你需要的列2,
列名3=b.你需要的列1,
列名4=b.你需要的列2,
......
}
返回类型为IQueryable,可以直接绑定为数据源
绑定表达式可以直接写你自定义的“列名1”,“列名2”...
如果需要手动取值,可以使用反射取值:代码如下:

C# code

foreach (var item in IQueryable)
 {
string _str= (item.GetType().InvokeMember("列名1", System.Reflection.BindingFlags.GetProperty, null, item, null)).ToString();                                     

}

------解决方案--------------------
探讨
引用:
from a in dt1.AsEnumerable()
join b in dt2.AsEnumerable()
on a.Field <int>("ID") equals
b.Field <int>("ID")
select new
{
  列名1=a.你需要的列1,
  列名2=a.你需要的列2,
  列名3=b.你需要的列1,
  列名4=b.你需要的列2,
  ......
}
返回类型为IQueryable,可以直接绑定为数据源
绑定表达式可以直接写你自定义的“列名1”,“列名2”...
如果需要手动取值,可以使用反射取值:代码如下:

C# codeforeach (var itemin IQueryable)
{string _str= (item.GetType().InvokeMember("列名1", System.Reflection.BindingFlags.GetProperty,null, item,null)).ToString();                                   

}



  列名1=a.你需要的列1,
  列名2=a.你需要的列2,
  列名3=b.你需要的列1,
  列名4=b.你需要的列2,
这些列的名称都是未知的,能不能取出关联表中全部的列?


------解决方案--------------------
帮顶,左胸痛,敲键盘都痛
------解决方案--------------------
探讨
帮顶,左胸痛,敲键盘都痛

------解决方案--------------------
DataSet ds = PrepareDataSet(); 

DataTable orders = ds.Tables["Orders"];
DataTable customers = ds.Tables["Customers"]; 
var query =
from order in orders.AsEnumerable()
join customer in customers.AsEnumerable()
on order.Field<string>("CustomerID") equals
customer.Field<string>("CustomerID")
select new
{
CustomerID =
order.Field<string>("CustomerID"),
CompanyName =
customer.Field<string>("CompanyName"),
OrderDate =
order.Field<DateTime>("OrderDate"),
OrderID =
order.Field<int>("OrderID")
}; 

------解决方案--------------------
也可使用微软知识库里DataSetHelper 
Distinct、Group by、Join和Create
------解决方案--------------------
还在研究中,Linq还不大会,帮顶
------解决方案--------------------