是否可以使用SelectMany()并使其表现得像左联接?
我试图将实体对象展平为表格格式,以便可以将其用作.rdlc报告的数据源。只要有一个子对象,SelectMany()便像 super 按钮一样工作,但是我想查看所有父对象,而不管它是否有子对象。
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 }));
}
这将使ownerAndPets看起来像:
ownerName =“Ricky”,petName =“涂抹”
ownerName =“Ricky”,petName =“Spot”
我需要的是:
ownerName =“Bobby”,petName = null
ownerName =“Ricky”,petName =“涂抹”
ownerName =“Ricky”,petName =“Spot”
最佳答案
确保数据集可枚举,然后使用“DefaultIfEmpty”。
var ownersAndPets = owners
.SelectMany(o => o.pets
.DefaultIfEmpty()
.Select(p => new
{
o.ownerName,
p.petName
}));
注意:我没有测试这段特定的代码,但是我之前已经使用过它,所以我知道它可以完成。
关于c# - EF1 SelectMany()左联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8012439/