所先創建2個DataTable並對其賦值,來進行模擬.
DataTable dt1 = new DataTable();
dt1.Columns.Add("ID", typeof(int));
dt1.Columns.Add("Name", typeof(string));
dt1.Columns.Add("GradeId", typeof(int));
DataTable dt2 = new DataTable();
dt2.Columns.Add("ID", typeof(int));
dt2.Columns.Add("Name", typeof(string));
for (int i = 0; i < 6; i++)
{
DataRow dr1 = dt1.NewRow();
dr1["ID"] = i + 1;
dr1["Name"] = "zzq" + (i + 1);
dr1["GradeId"] = i + 1;
dt1.Rows.Add(dr1);
}
for (int i = 0; i < 4; i++)
{
DataRow dr2 = dt2.NewRow();
dr2["ID"] = i + 1;
dr2["Name"] = i + 1 + "班";
dt2.Rows.Add(dr2);
}
需求大概是這樣的。
查詢出的數據應該包括(ID,NAME,GradeName)
但有個問題是
b對象和a對象關聯查詢出來到temp對象中第4條和第5條數據為null.
剛開以為直接取temp的數據就OK了,可是報了值不能為null的錯誤

所以看了一下temp查出來的數據其中4和5查出來的數據為null,這樣拿不到需求想要的結果

所以在GradeName中加了一個三元表達式的判斷,如下代碼。
var reslut = (from b in dt1.AsEnumerable() join a in dt2.AsEnumerable() on new { temp = b.Field<int>("GradeId") } equals new { temp = a.Field<int>("ID") } into temp from t in temp.DefaultIfEmpty() select new {ID=b.Field<int>("ID"),Name=b.Field<string>("Name"),GradeName = t==null?0:t["Name"] }).ToList();
最終顯示結果:

親,幫到您了嗎?樓主也剛入行沒多久,希望能給剛入行的同學們一點小幫助。
也希望走在前面的前輩們能給些好的建議和意見。
