在C#中直接写SQL查询语句就可以实现SQL中联合查询表的功能,但有时候不得不对两个datetable进行linq联合查询。
string strCon = "Data Source=(local);Database=mete_data;Uid=sa;Pwd=123;";//定义数据库连接字符串
SqlConnection sqlcon = new SqlConnection(strCon);//实例化数据库连接对象SqlDataAdapter sqlda;//声明SqlDataAdapter对象
DataSet myds = new DataSet();//实例化数据集对象
sqlda = new SqlDataAdapter("select * from USERMESSAGE", sqlcon);//实例化数据库桥接器对象
sqlda.Fill(myds, "A");//填充DataSet数据集
sqlda = new SqlDataAdapter("select * from RAIN_REALTIME", sqlcon);
sqlda.Fill(myds, "B");//填充DataSet数据集
var query = from abc in myds.Tables["A"].AsEnumerable()//使用LINQ从数据集中查询所有数据
join cde in myds.Tables["B"].AsEnumerable()
on abc.Field<string>("StationNo") equals cde.Field<string>("GprsID")
orderby abc.Field<string>("subdistrict") descending
select new
{
StreetName = abc.Field<string>("subdistrict"),
StationName = abc.Field<string>("StationName"),
rainValue = cde.Field<Int32>("RainValue"),
};
DataTable boundTable = new DataTable();
boundTable.Columns.Add("StreetName");
boundTable.Columns.Add("StationName");
boundTable.Columns.Add("rainValue", typeof(double));//这句话很重要,否则默认为string格式,影像聚合函数操作
query.ToList().ForEach(q => boundTable.Rows.Add(q.StreetName, q.StationName, q.rainValue));
//DataTable boundTable = query.CopyToDataTable<DataRow>();//这一句总是出错,请高手相助
dataGridView1.DataSource = boundTable;//显示查询到的数据集中的信息
//聚合函数
object test = dt.Compute("sum(rainValue)", "");
MessageBox.Show(test.ToString());