【发布时间】:2015-06-19 15:38:20
【问题描述】:
我有这个数据结构:
class Person
{
public string FirstName { get; set; }
}
class Pet
{
public int Id { get; set; }
public string Name { get; set; }
}
class Link
{
public Person Person { get; set; }
public int PetId { get; set; }
}
还有这个数据:
List<Person> people = new List<Person>
{
new Person {FirstName = "Foo"},
new Person {FirstName = "Bar"}
};
List<Pet> pets = new List<Pet>
{
new Pet {Id = 1, Name = "FooBoy"},
};
List<Link> links = new List<Link>
{
new Link {Person = people.First(), PetId = pets.First().Id}
};
现在我想获取所有人及其宠物名称的列表(如果没有宠物,则为 null) 结果应该是
Foo - FooBoy
Bar - null
我试过了
var query = from person in people
join lnk in links on person equals lnk.Person into linkPets
from link in linkPets.DefaultIfEmpty()
join p in pets on link.PetId equals p.Id into subPets
from subPet in subPets.DefaultIfEmpty()
select new { person.FirstName, PetName = (subPet == null ? String.Empty : subPet.Name) };
但我在link.Pet 上得到空引用异常。如果我删除linkPets.DefaultIfEmpty(),我只会得到第一个人。
【问题讨论】:
-
如果有没有主人的宠物,你也需要那个吗?
-
不,我不需要没有主人的宠物
标签: c# linq outer-join