Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多列将linq连接到数据集查询_C#_Linq_.net 3.5 - Fatal编程技术网

C# 使用多列将linq连接到数据集查询

C# 使用多列将linq连接到数据集查询,c#,linq,.net-3.5,C#,Linq,.net 3.5,您好,我正在尝试连接2个数据表。左一个包含3个不同的列作为主键,另一个包含相同的列作为外键。这里是左数据表图像: 右边的数据表Imge是: 这是我正在尝试使用的代码,但是没有返回任何内容,并且应该返回 var query5 = from ChanToNGrsToNgrDAnWal in chanToNGrsToNgrDAnWal.AsEnumerable() join Node in node.AsEnumerable() on ne

您好,我正在尝试连接2个数据表。左一个包含3个不同的列作为主键,另一个包含相同的列作为外键。这里是左数据表图像:

右边的数据表Imge是:

这是我正在尝试使用的代码,但是没有返回任何内容,并且应该返回

var query5 =
        from ChanToNGrsToNgrDAnWal in chanToNGrsToNgrDAnWal.AsEnumerable()
        join Node in node.AsEnumerable() 
            on new { 
                 A = ChanToNGrsToNgrDAnWal.Field<int?>("diffusers_Id"), 
                 B = ChanToNGrsToNgrDAnWal.Field<int?>("analogs_Id"), 
                 C = ChanToNGrsToNgrDAnWal.Field<int?>("wallstats_Id") }
            equals new { 
                 A = Node.Field<int?>("diffusers_Id"), 
                 B = Node.Field<int?>("analogs_Id"), 
                 C = Node.Field<int?>("wallstats_Id") 
            }                  
        select new
        {
            channel_Id = ChanToNGrsToNgrDAnWal.Field<int?>("channel_Id"),
            number = ChanToNGrsToNgrDAnWal.Field<string>("number"),
            nodeGroups_Id = ChanToNGrsToNgrDAnWal.Field<int>("nodeGroups_Id"),
            analogNodeSerial = ChanToNGrsToNgrDAnWal.Field<string>("analogNodeSerial"),
            diffuserNodeSerial = ChanToNGrsToNgrDAnWal.Field<string>("diffuserNodeSerial"),
            wallStatNodeSerial = ChanToNGrsToNgrDAnWal.Field<string>("wallStatNodeSerial"),
            diffusers_Id = ChanToNGrsToNgrDAnWal.Field<int?>("diffusers_Id"),
            analogs_Id = ChanToNGrsToNgrDAnWal.Field<int?>("analogs_Id"),
            wallstats_Id = ChanToNGrsToNgrDAnWal.Field<int?>("wallstats_Id"),
            typeCode = Node.Field<string>("typeCode"),
            node_Id = Node.Field<int?>("node_Id")

        };
var查询5=
来自ChanToNGrsToNgrDAnWal中的ChanToNGrsToNgrDAnWal.AsEnumerable()
在Node.AsEnumerable()中加入节点
关于新{
A=ChanToNGrsToNgrDAnWal.字段(“扩散器Id”),
B=ChanToNGrsToNgrDAnWal.字段(“类似物Id”),
C=ChanToNGrsToNgrDAnWal.Field(“wallstats_Id”)}
等于新{
A=节点字段(“扩散器Id”),
B=节点字段(“模拟Id”),
C=节点字段(“wallstats_Id”)
}                  
选择新的
{
通道Id=ChanToNGrsToNgrDAnWal.Field(“通道Id”),
编号=ChanToNGrsToNgrDAnWal.字段(“编号”),
节点组Id=ChanToNGrsToNgrDAnWal.Field(“节点组Id”),
analogNodeSerial=ChanToNGrsToNgrDAnWal.Field(“analogNodeSerial”),
diffuserNodeSerial=ChanToNGrsToNgrDAnWal.Field(“diffuserNodeSerial”),
wallStatNodeSerial=ChanToNGrsToNgrDAnWal.Field(“wallStatNodeSerial”),
扩散器Id=ChanToNGrsToNgrDAnWal.Field(“扩散器Id”),
analogs_Id=ChanToNGrsToNgrDAnWal.Field(“analogs_Id”),
wallstats\u Id=ChanToNGrsToNgrDAnWal.Field(“wallstats\u Id”),
typeCode=节点字段(“typeCode”),
node\u Id=node.Field(“node\u Id”)
};

有谁能告诉我为什么会发生这种情况,或者我写的查询是错误的,你们能帮我一下吗。

根据您的示例数据,这里没有任何匹配项(零与空不匹配)。如果应用程序的逻辑允许,则可以将字段的值转换为
int
,而不是
Nullable
。在这种情况下,将为
DbNull
单元格提供默认值(零):

    on new { 
         A = ChanToNGrsToNgrDAnWal.Field<int>("diffusers_Id"), 
         B = ChanToNGrsToNgrDAnWal.Field<int>("analogs_Id"), 
         C = ChanToNGrsToNgrDAnWal.Field<int>("wallstats_Id") 
    }
    equals new { 
         A = Node.Field<int>("diffusers_Id"), 
         B = Node.Field<int>("analogs_Id"), 
         C = Node.Field<int>("wallstats_Id") 
    }   
在新的{ A=ChanToNGrsToNgrDAnWal.字段(“扩散器Id”), B=ChanToNGrsToNgrDAnWal.字段(“类似物Id”), C=ChanToNGrsToNgrDAnWal.字段(“wallstats_Id”) } 等于新{ A=节点字段(“扩散器Id”), B=节点字段(“模拟Id”), C=节点字段(“wallstats_Id”) }
结果是什么?这里有异常吗?没有,我没有异常,但它返回空数据Table可能是因为DBNull!=Null“Right DataTable”是否总是包含键值为空的记录?如果至少有一个匹配项,你可能希望他们匹配?即
,其中A==A或B==B或C==C
。正如下面所指出的,你所展示的数据永远不会匹配。是的,我逐渐意识到,你所说的肯定就是我所做的。谢谢您的输入。@Clement为什么我不知道您遇到了什么样的错误?@Clement只需为第一个键选择添加默认值,或者尝试了一下也没有效果仍然语法错误,我想知道是否没有其他方法可以用来加入此数据表?@Clement更新了答案。我认为在你的情况下,应该由
而不是
来做这项工作。