在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());