EF1 SelectMany()离开了联接

Ecl*_*pse 6 c# linq linq-to-entities rdlc

是否可以使用SelectMany()并使其行为像左连接?

我试图将实体对象展平为表格格式,以便我可以将其用作.rdlc报告的数据源.只要有一个子对象,SelectMany()的工作方式就像一个魅力,但我希望看到所有的父对象,无论它是否有子节点.

public class Owner
{
    public int ownerID { get; set; }
    public string ownerName { get; set; }
    public List<Pet> pets { get; set; }
}

public class Pet
{
    public int petID { get; set; }
    public string petName { get; set; }
    public string petType { get; set; }
}

    public void GetOwners()
    {
        List<Owner> owners = new List<Owner>();
        owners.Add(new Owner{ownerID=1, ownerName="Bobby", pets = null});
        owners.Add(new Owner
        {
            ownerID = 2,
            ownerName = "Ricky",
            pets = new List<Pet>(){
                new Pet{petID=1, petName="Smudge", petType="Cat"},
                new Pet{petID=2, petName="Spot", petType="Dog"}}
        });

        var ownersAndPets = owners.SelectMany(o => o.pets
            .Select(p => new { o.ownerName, p.petName }));
    }
Run Code Online (Sandbox Code Playgroud)

这将使ownerAndPets看起来像:
ownerName ="Ricky",petName ="Smudge"
ownerName ="Ricky",petName ="Spot"

我需要的是:
ownerName ="Bobby",petName = null
ownerName ="Ricky",petName ="Smudge"
ownerName ="Ricky",petName ="Spot"

Ecl*_*pse 9

确保数据集是可枚举的,然后使用"DefaultIfEmpty".

        var ownersAndPets = owners
        .SelectMany(o => o.pets
            .DefaultIfEmpty()
            .Select(p => new 
            { 
                o.ownerName, 
                p.petName 
            }));
Run Code Online (Sandbox Code Playgroud)

注意:我没有测试这段特殊的代码,但之前我已经使用过这个,所以我知道它可以完成.