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连接多个数据表-InvalidOperationException_C#_Linq_Join_Datatable - Fatal编程技术网

C# LINQ连接多个数据表-InvalidOperationException

C# LINQ连接多个数据表-InvalidOperationException,c#,linq,join,datatable,C#,Linq,Join,Datatable,下面是我使用LINQ连接多个数据表的代码。代码没有错误,但返回运行时错误/InvalidOperationException,表示源代码不包含数据行 如果我在从join raw3到join raw4.FieldOtherString}结尾的行中进行注释,我会在CopyToDataTable语句之后看到DataTable中的数据 如果我使用所有的数据表,我将得到InvalidOperationException,因为源不包含数据行。错误另外,我想用第一个表firstDT连接所有表 DataTabl

下面是我使用LINQ连接多个数据表的代码。代码没有错误,但返回运行时错误/InvalidOperationException,表示源代码不包含数据行

如果我在从join raw3到join raw4.FieldOtherString}结尾的行中进行注释,我会在CopyToDataTable语句之后看到DataTable中的数据

如果我使用所有的数据表,我将得到InvalidOperationException,因为源不包含数据行。错误另外,我想用第一个表firstDT连接所有表

DataTable datatable = new DataTable();
datatable.Columns.Add("First_Code", typeof(string));
datatable.Columns.Add("First_Date", typeof(DateTime));
datatable.Columns.Add("OtherString", typeof(string));
datatable.Columns.Add("FirstPrice", typeof(decimal));
datatable.Columns.Add("SecondPrice", typeof(decimal));
datatable.Columns.Add("ThirdPrice", typeof(decimal));
datatable.Columns.Add("FourthPrice", typeof(decimal));

var data = from raw1 in firstDT.AsEnumerable()
            join raw2 in secondDT.AsEnumerable() on
                new { ID = raw1.Field<string>("First_Code"), Date = raw1.Field<DateTime>("First_Date"), OtherString = raw1.Field<string>("OtherString") }
                equals
                new { ID = raw2.Field<string>("Second_Code"), Date = raw2.Field<DateTime>("Second_Date"), OtherString = raw2.Field<string>("OtherString") }
            join raw3 in thirdDT.AsEnumerable() on
                new { ID = raw1.Field<string>("First_Code"), Date = raw1.Field<DateTime>("First_Date"), OtherString = raw1.Field<string>("OtherString") }
                equals
                new { ID = raw3.Field<string>("Third_Code"), Date = raw3.Field<DateTime>("Third_Date"), OtherString = raw3.Field<string>("OtherString") }
            join raw4 in fourthDT.AsEnumerable() on
                new { ID = raw1.Field<string>("First_Code"), Date = raw1.Field<DateTime>("First_Date"), OtherString = raw1.Field<string>("OtherString") }
                equals
                new { ID = raw4.Field<string>("Fourth_Code"), Date = raw4.Field<DateTime>("Fourth_Date"), OtherString = raw4.Field<string>("OtherString") }
            select datatable.LoadDataRow(new object[]
    {
        raw1.Field<string>("First_Code"),
        raw1.Field<DateTime>("First_Date"),
        raw1.Field<string>("OtherString"),
        raw1.Field<decimal>("FirstPrice"),
        raw2.Field<decimal>("SecondPrice")
        raw3.Field<decimal>("ThirdPrice")
        raw4.Field<decimal>("FourthPrice")
    }, false);

data.CopyToDataTable(); 

抱歉,但不清楚你想要什么?如果我加入firstDT和secondDT,效果很好。如果我将第三个/额外的数据表添加到LINQ查询中,问题就开始了。第一个DT,第二个DT工作。第一个,第二个,第三个不工作。firstDT、secondDT、thirdDT、fourthDT不工作。我想知道InvalidPetationException/源不包含数据行的原因。换句话说,如何始终使用第一个数据表和多个列连接多个数据表。您确定第三个和第四个数据表至少有一行吗?否则,动态获取数据可能会失败。如果是这样的话,你可以查一下