Ответ 1
Это потому, что вы используете join ... into
, который объединяет группу. Вы просто хотите нормальное соединение:
var query = (from p in people
join pts in pets on p equals pts.Owner
select p).Distinct();
В качестве альтернативы, если вы хотите, чтобы люди с домашними животными и их владельцы, вы могли бы сделать что-то вроде:
var query = pets.GroupBy(pet => pet.Owner)
.Select(x => new { Owner = x.Key, Pets = x.ToList() });
Это даст результат, когда вы можете получить каждого владельца и своих питомцев, но только для людей, у которых есть домашние животные.
Если вы хотите что-то еще, сообщите нам...
Кстати, сейчас самое подходящее время для изучения инициализаторов объектов и коллекций. Здесь более простой способ инициализировать ваш список people
, например:
List<Person> people = new List<Person>
{
new Person { FirstName = "Jon", LastName = "Skeet" },
new Person { FirstName = "Marc", LastName = "Gravell" },
new Person { FirstName = "Alex", LastName = "Grover" },
};
Гораздо более компактно:)
РЕДАКТИРОВАТЬ: крест-соединение легко:
var query = from person in people
from pet in pets
select new { person, pet };
Левые соединения эффективно эмулируются с помощью групповых объединений. Похоже, у вас есть С# в Depth, я предлагаю вам внимательно прочитать главу 11:)