c# – 左外连接 – LINQ到数据表

c# – 左外连接 – LINQ到数据表,第1张

概述我正在尝试在两个数据表上使用LINQ应用左外连接.当我尝试调试并查看结果变量中包含的数据时,我收到下面列出的异常: System.ArgumentException: Value cannot be null. Parameter name: row 码: private DataTable DataTable1(){ DataRow dataRow = null; DataTa 我正在尝试在两个数据表上使用liNQ应用左外连接.当我尝试调试并查看结果变量中包含的数据时,我收到下面列出的异常:

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到数据表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1218265.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存