c# - Linq连接查询错误

标签 c# linq join

我正在尝试连接多个数据表以创建单个数据表。这是查询。

var row = from r0w1 in dt_vi.AsEnumerable()
          join r0w2 in dt_workcenter.AsEnumerable()
          on r0w1.Field<int>("wcID") equals r0w2.Field<int>("iD")
          join r0w3 in dt_recipe.AsEnumerable()
          on r0w1.Field<int?>("curingRecipeID") equals r0w3.Field<int?>("recipe_id") join r0w4 in dt_defect.AsEnumerable()
          on r0w1.Field<int?>("defectID") equals r0w4.Field<int?>("defect_id") into ps
          from r0w4 in ps.DefaultIfEmpty()
          select r0w1.ItemArray.Concat(r0w2.ItemArray.Concat(r0w3.ItemArray.Concat(r0w4.ItemArray))).ToArray();

foreach (object[] values in row)
    dt.Rows.Add(values);

我尝试将 r0w1 和 r0w4 作为 LEFT OUTER JOIN 加入。但是这里我得到了错误

Object reference not set to an instance of an object

错误似乎在

r0w4.ItemArray

可能是 r0w4 没有得到任何值。可能的原因是什么?

最佳答案

问题是 ps.DefaultIfEmpty() 将在没有行匹配时返回默认值(在本例中为 null),因此它会抛出该错误。

你可以这样改:-

r0w3.ItemArray.Concat(r0w4 != null ? r0w4 .ItemArray : new object[] {}))

关于c# - Linq连接查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34172471/

相关文章:

c# - 将项目添加到 List<T>

c# - 在 Entity Framework 查询中使用 C# 函数

linq - 有没有办法从某种类型的列表中创建属性值列表?

PHP+Mysql 多表按日期排序(通过左连接)

multithreading - 如果启动多个线程,Perl的线程连接方法是否会等待第一个线程完成?

javascript - MVC 上的成功/失败消息

c# - 调试时控件不会转到虚方法

c# - 如果匿名类型应该是不可变的,为什么可以更改它?

c# - 基于两个属性从列表中选择不同值的最快方法

mysql - 如何加入多个 count(*) 查询?