使用Linq扩展方法左外连接?

时间:2017-01-05 04:33:01

标签: c# linq

你能帮我翻译一下这个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无效的匿名类型成员声明符。必须使用成员分配,简单名称或成员访问声明匿名类型成员。

1 个答案:

答案 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}))