linq 查询多个集合/查询多个Datatable linq to sql 联合查询

最近接手 了一个非常古老的项目,使用aspx开发的项目,令人不得不感叹,政府的项目就是水准不太高。钱也好挣。

分库查询,多个结果集如何计算取交集。

利用sql查询返回的数据DataTable,如何去查询其中的数据,兵进行条件删选,排序等。

 

这里又两个DataTable数据集,分别是data1,data2.

利用linq获取联合查询,根据data1连接data2,data1为主表,相当于sql中的左连接

 var datalist = from n in data1.AsEnumerable()
                               from m in data2.AsEnumerable()
                               where m.Field<string>("CoalMineID") == n.Field<string>("CollieryId_ForDevice") && m.Field<string>("SensorID") == n.Field<string>("SensorID")
                               select new
                               {
                                    //AutoId = n.FieID<int>("AutoId");这种方式会报错,类型转换不成功,至今无解。直接所有的转ToString(),成功。
                                   AutoId = n["AutoId"].ToString(),
                                   CollieryId = n["CollieryId"].ToString(),
                                   CollieryName = n["CollieryName"].ToString(),
                                   CompanyInfoId = n["CompanyInfoId"].ToString(),
                                   CollieryId_ForDevice = n["CollieryId_ForDevice"].ToString(),
                                   SubStationID = n["SubStationID"].ToString(),
                                   SensorID = n["SensorID"].ToString(),
                                   SensorLocation = n["SensorLocation"].ToString(),
                                   SensorType = n["SensorType"].ToString(),
                                   DataType = n["DataType"].ToString(),
                                   Unit = n["Unit"].ToString(),
                                   MaximumRange = n["MaximumRange"].ToString(),
                                   MinimumRange = n["MinimumRange"].ToString(),
                                   UpperLimit = n["UpperLimit"].ToString(),
                                   LowerLimit = n["LowerLimit"].ToString(),
                                   OutageValue = n["OutageValue"].ToString(),
                                   ReconnectValue = n["ReconnectValue"].ToString(),
                                   IfDealed = n["IfDealed"].ToString(),
                                   CurrValue = m["CurrValue"].ToString(),
                                   AlarmIndicator = m["AlarmIndicator"].ToString(),
                                   GenerationDate = m["GenerationDate"].ToString(),
                                   ImportTime = m["ImportTime"].ToString()
                               };

AsEnumerable()是把DataTable转为Enumerable操作类型,

select new{}在这里面自定义显示字段。

注意:linq都是先定义,后执行,在需要的地方才会执行。

调试跟踪,成功获取到想要的数据

linq的基本操作语法:

1,linq单表如何查询a表中id等于2的数据。如何查询a表和b表两张数据,a表id对应b表tid。

单表:var model=from a1in a where a1.id=2 select a1。

多表:var model = from a1 in a join b1 in b on a1.id equals b1.tid into team select team.

posted @ 2020-04-14 18:59  夜钓星云  阅读(47)  评论(0)    收藏  举报  来源