Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 3奇对象集合上的Linq右连接_C#_Linq - Fatal编程技术网

C# 3奇对象集合上的Linq右连接

C# 3奇对象集合上的Linq右连接,c#,linq,C#,Linq,Hi有3个模型列表,其中包含奇数个元素,它们都通过用户ID连接 这3个模型列表在现实世界中,它将在执行时从3个存储过程中获取数据。 我正在尝试使用Linq加入他们,“我不知道如何加入”。我知道Linq中有一个左连接,但是如果出现第一个列表被填充的情况,那么在第二个和/或第三个列表被填充之前,一个新用户将被添加所有3个表的相关数据。 因此,新用户数据将位于第二个和第三个表中,而不是第一个表中 我想在我用Linq收集数据后,显示ViewModel的所有数据? 这是您需要右连接的时候,因为您希望在左表

Hi有3个模型列表,其中包含奇数个元素,它们都通过用户ID连接

这3个模型列表在现实世界中,它将在执行时从3个存储过程中获取数据。 我正在尝试使用Linq加入他们,“我不知道如何加入”。我知道Linq中有一个左连接,但是如果出现第一个列表被填充的情况,那么在第二个和/或第三个列表被填充之前,一个新用户将被添加所有3个表的相关数据。 因此,新用户数据将位于第二个和第三个表中,而不是第一个表中 我想在我用Linq收集数据后,显示ViewModel的所有数据? 这是您需要右连接的时候,因为您希望在左表数据上显示空值

有没有人知道有没有一种方法可以正确加入,或者有没有更好的方法? 下面是3个对象列表,我需要使用Linq为我的Viewmodel收集它们

请多提建议

B

类程序
{
静态void Main(字符串[]参数)
{
List dailyReports=新列表(新CommissionBrokerReport[]
{ 
新的CommissionBrokerReport{userId=101,firstName=“Bruce”,lastName=“Wayne”,value=17433.3333M,average=0M},
新佣金经纪人报告{userId=303,firstName=“Selina”,lastName=“Kyle”,value=7279.13M,average=0M}
});
List weeklyReports=新列表(新佣金经纪人报告[])
{ 
新的CommissionBrokerReport{userId=101,value=0M,average=7532.9167M},
新的CommissionBrokerReport{userId=303,value=0M,average=0M},
新的CommissionBrokerReport{userId=404,value=33.3333M,average=666.66M}
});
List monthlyReports=新列表(新佣金经纪人报告[]
{ 
新的CommissionBrokerReport{userId=101,value=37550.0000M,average=4653.7500M},
新的CommissionBrokerReport{userId=303,value=0M,average=0M},
新CommissionBrokerReport{userId=404,value=33.3333M,average=666.66M},
新的CommissionBrokerReport{userId=505,value=55.5555M,average=10000.0000M}
});
}
}

这是一种方法,您可以
加入
3
列表
,并从不同的
列表
中获得缺失记录的
null
结果

var MonthlyWeeklyRpt = 
  from m in monthlyReports
  join w in weeklyReports on m.userId equals w.userId into weeklyrpt
  from w in weeklyrpt.DefaultIfEmpty()
  select new
  {
     MonthlyReports = m,
     WeeklyReports = w
  };


var MonthlyWeeklyDailyRpt = 
 from q in MonthlyWeeklyRpt
 join d in dailyReports on q.MonthlyReports.userId equals d.userId into dailyrpt
 from d in dailyrpt.DefaultIfEmpty()
 select new
 {
   MonthlyReports = q.MonthlyReports,
   WeeklyReports = q.WeeklyReports,
   DailyReports =d
 };

        foreach (var item in MonthlyWeeklyDailyRpt)
        {
            Console.WriteLine("monthly reports");
            Console.WriteLine(item.MonthlyReports.userId + " " + item.MonthlyReports.value);


            if (item.WeeklyReports != null)
            {
                Console.WriteLine("weekly reports");
                Console.WriteLine(item.WeeklyReports.userId + " " + item.WeeklyReports.value);                   
            }
            else
                Console.WriteLine("null weekly report");


            if (item.DailyReports != null)
            {
                Console.WriteLine("daily reports");
                Console.WriteLine(item.DailyReports.userId + " " + item.DailyReports.value);

            }
            else
                Console.WriteLine("null daily report");

            Console.WriteLine(" ");

        }
它将打印以下输出

monthly reports
101 37550.0000
weekly reports
101 0
daily reports
101 17433.3333

monthly reports
303 0
weekly reports
303 0
daily reports
303 7279.13

monthly reports
404 33.3333
weekly reports
404 33.3333
null daily report

monthly reports
505 55.5555
null weekly report
null daily report

我希望它能对您有所帮助。

如果您知道如何进行左联接,请切换表,这就是您的右联接。请添加更多信息,即预期结果,可能还有您的代码。您好,Neolik,如果我在使用userId加入时这样做,我仍然会收到相同的错误。左边的表将是半空的,一个右连接将使我所有的数据都来自右边的表,而左边为空。这就是左联接和右联接之间的区别。Neolik,比如说,如果出现一种情况,第一个列表被填充,然后在第二个和第三个列表被填充之前,一个新用户被添加到系统中,并带有所有3个表的相关数据,这是在系统实时运行时发生的。因此,新的用户数据将显示在第二个和第三个表上,而不是第一个表上,我希望在我将它们与LinqSo一起收集后,所有的数据都显示在我的ViewModel上。也许你需要一个完全连接?好的,linq中的完全连接是什么?@user2606847如果需要,请接受作为答案。所以其他人可以使用它。感谢这个查询工作得很好,我甚至可以通过在第二个查询的where上添加null来去掉null,例如where(d!=null&&q!=null)一个问题,就是试图将两个查询放在一个查询中以减少所用的资源?因为有两个查询,它不会使用更多的内存。当您在
for循环中使用时,它将开始作为一个查询进行计算。
。我说的是,有一个查询比有两个查询资源更少,因为每个查询都在表中循环,这是该代码的两倍。每个循环占用资源?还是我错了?有没有办法让一个查询做同样的工作?据我所知,以上两个查询比一个查询使用更多的资源。以上内容更具可读性。可能是合并成一个是你的练习:)
monthly reports
101 37550.0000
weekly reports
101 0
daily reports
101 17433.3333

monthly reports
303 0
weekly reports
303 0
daily reports
303 7279.13

monthly reports
404 33.3333
weekly reports
404 33.3333
null daily report

monthly reports
505 55.5555
null weekly report
null daily report