你能帮我翻译一下这个Linq查询到扩展方法:
var query = from person in people
join pet in pets on person equals pet.Owner into gj
from subpet in gj.DefaultIfEmpty()
select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };
查询来自MSDN page左外连接。
我已经这样做了:
var result = people.join(pets, x, y => y.Owner, (x, y) => {
x.FirstName,
PetName = y == null ? String.Empty : y.Name
}).ToList();
但我不知道如何处理DefaultIfEmpty()
?
按照其他解决方案的说明添加DefaultIfEmpty()
会导致CS0746无效的匿名类型成员声明符。必须使用成员分配,简单名称或成员访问声明匿名类型成员。
答案 0 :(得分:1)
您可以使用GroupJoin
people.GroupJoin(pets,p => p,pt => pt.Owner,
(p, pt) => new { p.FirstName, names = pt.Select(y => y.Name)})
.SelectMany(p => p.names.DefaultIfEmpty().Select(x => new {p.FirstName,PetName=x}))