c# – 左外连接 – LINQ到数据表
发布时间:2020-12-16 01:55:31 所属栏目:百科 来源:网络整理
导读:我正在尝试在两个数据表上使用LINQ应用左外连接.当我尝试调试并查看结果变量中包含的数据时,我收到下面列出的异常: System.ArgumentException: Value cannot be null. Parameter name: row 码: private DataTable DataTable1(){ DataRow dataRow = null; D
我正在尝试在两个数据表上使用LINQ应用左外连接.当我尝试调试并查看结果变量中包含的数据时,我收到下面列出的异常:
码: private DataTable DataTable1() { DataRow dataRow = null; DataTable dt1 = new DataTable(); dt1.Columns.Add("EmpId"); dt1.Columns.Add("EmpName"); dataRow = dt1.NewRow(); dataRow["EmpId"] = "EMP001"; dataRow["EmpName"] = "Ajaj Kumar"; dt1.Rows.Add(dataRow); dataRow = dt1.NewRow(); dataRow["EmpId"] = "EMP002"; dataRow["EmpName"] = "Sanjay Gupta"; dt1.Rows.Add(dataRow); dataRow = dt1.NewRow(); dataRow["EmpId"] = "EMP003"; dataRow["EmpName"] = "Ashish Charan"; dt1.Rows.Add(dataRow); dt1.AcceptChanges(); return dt1; } private DataTable DataTable2() { DataRow dr = null; DataTable dt2 = new DataTable(); dt2.Columns.Add("EmpId"); dt2.Columns.Add("Salary"); dr = dt2.NewRow(); dr["EmpId"] = "EMP001"; dr["Salary"] = "50000"; dt2.Rows.Add(dr); dr = dt2.NewRow(); dr["EmpId"] = "EMP002"; dr["Salary"] = "45000"; dt2.Rows.Add(dr); dt2.AcceptChanges(); return dt2; } private void Form1_Load(object sender,EventArgs e) { var empInfo = DataTable1().AsEnumerable(); var empSal = DataTable2().AsEnumerable(); var result = from dtEmpRow in empInfo join dtEmpSal in empSal on dtEmpRow.Field<string>("EmpId") equals dtEmpSal.Field<string>("EmpId") into outer from dtEmpSal in outer.DefaultIfEmpty() select new { Id = dtEmpRow.Field<string>("EmpId"),Name = dtEmpRow.Field<string>("EmpName"),Salary = ((dtEmpRow == null) ? "(no salary)" : dtEmpSal.Field<string>("Salary")) }; } 解决方法
这是因为这里dtEmpSal为null(如果sequence为空则为默认情况):
from dtEmpSal in outer.DefaultIfEmpty() // dtEmpSal is null 当您尝试调用Field< T> DataRow上的扩展名为null,您将获得该异常: dtEmpSal.Field<string>("Salary") // System.ArgumentException 用三元运算符修复它.你在附近,但检查错误的价值: from dtEmpRow in empInfo join dtEmpSal in empSal on dtEmpRow.Field<string>("EmpId") equals dtEmpSal.Field<string>("EmpId") into outer from dtEmpSal in outer.DefaultIfEmpty() select new { Id = dtEmpRow.Field<string>("EmpId"),// here instead of dtEmpRow you should check dtEmpSal Salary = (dtEmpSal == null) ? "(no salary)" : dtEmpSal.Field<string>("Salary") }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |