Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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# EF1 SelectMany()左连接_C#_Linq To Entities_Rdlc_Linq - Fatal编程技术网

C# EF1 SelectMany()左连接

C# EF1 SelectMany()左连接,c#,linq-to-entities,rdlc,linq,C#,Linq To Entities,Rdlc,Linq,是否可以使用SelectMany()并使其行为类似于左连接 我试图将实体对象展平为表格格式,以便将其用作.rdlc报表的数据源。只要有子对象,SelectMany()就可以像一个符咒一样工作,但我希望看到所有的父对象,不管它是否有子对象 public class Owner { public int ownerID { get; set; } public string ownerName { get; set; } public List<Pet> pets

是否可以使用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 }));
    }
公共类所有者
{
public int ownerID{get;set;}
公共字符串所有者名称{get;set;}
公共列表宠物{get;set;}
}
公营宠物
{
公共int-petID{get;set;}
公共字符串petName{get;set;}
公共字符串类型{get;set;}
}
public void GetOwners()
{
列表所有者=新列表();
添加(新所有者{ownerID=1,ownerName=“Bobby”,pets=null});
所有者。添加(新所有者)
{
ownerID=2,
ownerName=“Ricky”,
pets=新列表(){
新宠物{petID=1,petName=“Smudge”,petType=“Cat”},
新宠物{petID=2,petName=“Spot”,petType=“Dog”}
});
var ownersAndPets=owners。选择many(o=>o.pets)
.Select(p=>new{o.ownerName,p.petName});
}
这将使主人和宠物看起来像:
ownerName=“Ricky”,petName=“Smudge”
ownerName=“Ricky”,petName=“Spot”

我需要的是:
ownerName=“Bobby”,petName=null
ownerName=“Ricky”,petName=“Smudge”

ownerName=“Ricky”,petName=“Spot”

确保数据集可枚举,然后使用“DefaultIfEmpty”


注意:我没有测试这段特定的代码,但我以前使用过它,因此我知道它可以完成。

我想我刚刚意识到这是不可能的,因为子属性都必须为空。如果试图将p.petID拉入匿名类型,则会得到一个null异常。啊。
        var ownersAndPets = owners
        .SelectMany(o => o.pets
            .DefaultIfEmpty()
            .Select(p => new 
            { 
                o.ownerName, 
                p.petName 
            }));