C# 使用linq连接3组数据

C# 使用linq连接3组数据,c#,entity-framework,linq,asp.net-core,C#,Entity Framework,Linq,Asp.net Core,我正在使用MicrosoftEntityFramework和.NETCore2.1创建一个web应用程序 在我的一个控制器中,我试图连接3组不同的数据 下面是我如何处理过滤数据的过程: var eventSponsers = await _context.Sponsers .Where(s => s.catalogId != null).ToListAsync(); var eventBands = await _context.B

我正在使用MicrosoftEntityFramework和.NETCore2.1创建一个web应用程序

在我的一个控制器中,我试图连接3组不同的数据

下面是我如何处理过滤数据的过程:

    var eventSponsers = await _context.Sponsers
                    .Where(s => s.catalogId != null).ToListAsync();

    var eventBands = await _context.Bands
        .Where(b => b.typeId == 3).ToListAsync();

    var eventTickets = await _context.Tickets
        .Where(t => t.dateTimeStart >= startDate && t.dateTimeStart <= endDate).ToListAsync();
有没有办法用c和linq做到这一点


谢谢

尝试使用以下linq连接三组数据:

var result = from eb in eventBands
                      join et in eventTickets on eb.venueID equals et.venueID into bt
                      from x in bt.DefaultIfEmpty()

                      join es in eventSponsers on x.eventID equals es.eventID into st
                      from y in st.DefaultIfEmpty()
                      select new
                      {
                          // Add your assignments
                          //eb = eb.venueID,
                          //et = x.venueID,
                          //es = y.eventID

                      };
更新:

若要将结果返回到视图,请尝试使用ViewModel

 var result = ...
                      select new LinqViewModel
                      {


                      };
 return View(result.ToList());
鉴于:

@model IEnumerable<LinqViewModel>

尝试使用以下linq连接三组数据:

var result = from eb in eventBands
                      join et in eventTickets on eb.venueID equals et.venueID into bt
                      from x in bt.DefaultIfEmpty()

                      join es in eventSponsers on x.eventID equals es.eventID into st
                      from y in st.DefaultIfEmpty()
                      select new
                      {
                          // Add your assignments
                          //eb = eb.venueID,
                          //et = x.venueID,
                          //es = y.eventID

                      };
更新:

若要将结果返回到视图,请尝试使用ViewModel

 var result = ...
                      select new LinqViewModel
                      {


                      };
 return View(result.ToList());
鉴于:

@model IEnumerable<LinqViewModel>

可能的副本请参见。这是一个VB.NET问题,但将代码转换为C应该足够容易;也许我的朋友会帮助你。这些原则甚至适用于LINQ到对象。可能的重复请参见。这是一个VB.NET问题,但将代码转换为C应该足够容易;也许我的朋友会帮助你。这些原则甚至适用于LINQ到对象。我如何将其返回到我的视图,类似这样的东西?返回Viewresult.FirstOrDefault;谢谢对不起,我还有一个问题。在你的例子中,x和y是什么?当我试图在我的项目中使用它们时,它们不会被识别。谢谢如果左侧元素没有匹配项,请将DefaultIfEmpty方法与组联接结合使用,以指定要生成的默认右侧元素。x代表bt中的票证类,y代表st.x中的赞助商类。y可以更改为其他单词。如果要将结果返回到视图,则需要指定ViewModel并使用select new ViewModel{}而不是匿名类型。然后返回result.ToList并在视图中使用@model IEnumerable我如何将其返回到我的视图中,类似这样?返回Viewresult.FirstOrDefault;谢谢对不起,我还有一个问题。在你的例子中,x和y是什么?当我试图在我的项目中使用它们时,它们不会被识别。谢谢如果左侧元素没有匹配项,请将DefaultIfEmpty方法与组联接结合使用,以指定要生成的默认右侧元素。x代表bt中的票证类,y代表st.x中的赞助商类。y可以更改为其他单词。如果要将结果返回到视图,则需要指定ViewModel并使用select new ViewModel{}而不是匿名类型。然后返回result.ToList并在视图中使用@model IEnumerable