System.ArgumentException: Value cannot be null. Parameter name: row
码:
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 empInfojoin dtEmpSal in empSal on dtEmpRow.FIEld<string>("EmpID") equals dtEmpSal.FIEld<string>("EmpID")into outerfrom 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")};总结
以上是内存溢出为你收集整理的c# – 左外连接 – LINQ到数据表全部内容,希望文章能够帮你解决c# – 左外连接 – LINQ到数据表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)