C# 是否可以从linq查询中获取左连接列表

C# 是否可以从linq查询中获取左连接列表,c#,linq,C#,Linq,假设我有这个参考设置 public class Account { Guid ID {get;set;} string name {get;set} } public class Order { Guid ID {get;set;} } public class AccountOrder { Guid ID {get;set} Guid AccountID {get;set} Guid OrderID {get;set} } Now when I

假设我有这个参考设置

public class Account
{
    Guid ID {get;set;}
    string name {get;set}
}
public class Order
{
    Guid ID {get;set;}
}
public class AccountOrder
{
    Guid ID {get;set}
    Guid AccountID {get;set}
    Guid OrderID {get;set}
}

Now when I want to model this setup as so:
public class AccountOrderModel
{
    //One account with many orders 
    string name {get;set}
    List<Order>orders {get;set;}
}
公共类帐户
{
Guid ID{get;set;}
字符串名称{get;set}
}
公共阶级秩序
{
Guid ID{get;set;}
}
公共类帐户命令
{
Guid ID{get;set}
Guid AccountID{get;set}
Guid OrderID{get;set}
}
现在,当我想将此设置建模为:
公共类AccountOrderModel
{
//一个账户有很多订单
字符串名称{get;set}
Listorders{get;set;}
}

我想使用Linq获得1个帐户,其中包含基于帐户订单参考的所有订单

我以前发布的代码不是正确的左外连接。。如果没有关联订单,则不会返回帐户。在此已修复的代码中:

        var aom = from a in accounts
                  join ao in accountorders on a.ID equals ao.AccountID into aoGroup
                  from aod in aoGroup.DefaultIfEmpty(new AccountOrder())
                  join o in orders on aod.OrderID equals o.ID into oGroup
                  group oGroup by a into g
                  select new AccountOrderModel() { Name = g.Key.Name, orders = g.SelectMany(x => x).ToList() };

它已经过测试,我想我最终得到了正确的答案。

我之前发布的代码不是正确的左外连接。。如果没有关联订单,则不会返回帐户。在此已修复的代码中:

        var aom = from a in accounts
                  join ao in accountorders on a.ID equals ao.AccountID into aoGroup
                  from aod in aoGroup.DefaultIfEmpty(new AccountOrder())
                  join o in orders on aod.OrderID equals o.ID into oGroup
                  group oGroup by a into g
                  select new AccountOrderModel() { Name = g.Key.Name, orders = g.SelectMany(x => x).ToList() };

它已经过测试,我想我终于找到了正确的方法。

我不认为在这样的linq查询中可以调用ToList()。还有为什么我不能使用into关键字?看起来那样会更有效率。我不认为这会起作用。当运行测试时,我也注意到了这一点。如果我只是将帐户连接到引用表,并将它们“放入”结果中,效果会很好,但是当我再次连接实际的订单表时,它只返回1。@user516883您可以在Linq to objects查询中调用ToList()。不在Linq to sql或Linq to entities中。@user516883,我已经更新并测试了代码,它可以与我的新编辑一起正常工作。谢谢让我尝试一下。我还注意到你说的不是最有效的方法。你会采取什么方法。因为当您使用CodeFirst时,例如在order对象上有一个帐户。它创建了一个引用这两个实体的表,我不认为在这样的linq查询中可以调用ToList()。还有为什么我不能使用into关键字?看起来那样会更有效率。我不认为这会起作用。当运行测试时,我也注意到了这一点。如果我只是将帐户连接到引用表,并将它们“放入”结果中,效果会很好,但是当我再次连接实际的订单表时,它只返回1。@user516883您可以在Linq to objects查询中调用ToList()。不在Linq to sql或Linq to entities中。@user516883,我已经更新并测试了代码,它可以与我的新编辑一起正常工作。谢谢让我尝试一下。我还注意到你说的不是最有效的方法。你会采取什么方法。因为当您使用CodeFirst时,例如在order对象上有一个帐户。它创建了一个引用这两个实体的表?你没有像
Account.AccountOrders
等导航属性吗?这是哪种LINQ风格?你没有像
Account.AccountOrders
等导航属性吗。?