2015-10-05 3 views
0

Я пытаюсь использовать этот sample:левое внешнее соединение с Linq без DefaultIfEmpty

То, что я хочу, это только возвращение:'the Книга с Id = 2.

new Book{BookID=2, BookNm=".NET and COM for Newbies"}, 

Я хочу только тех, книга (ы), которая не имеет ордеров.

Когда я удаляю DefaultIfEmpty(), он тоже не работает.

UPDATE

Person magnus = new Person { FirstName = "Magnus", LastName = "Hedlund" }; 
      Person terry = new Person { FirstName = "Terry", LastName = "Adams" }; 
      Person charlotte = new Person { FirstName = "Charlotte", LastName = "Weiss" }; 
      Person arlene = new Person { FirstName = "Arlene", LastName = "Huff" }; 

      Pet barley = new Pet { Name = "Barley", Owner = terry }; 
      Pet boots = new Pet { Name = "Boots", Owner = terry }; 
      Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte }; 
      Pet bluemoon = new Pet { Name = "Blue Moon", Owner = terry }; 
      Pet daisy = new Pet { Name = "Daisy", Owner = magnus }; 

      // Create two lists. 
      List<Person> people = new List<Person> { magnus, terry, charlotte, arlene }; 
      List<Pet> pets = new List<Pet> { barley, boots, whiskers, bluemoon, daisy }; 

      var query = from person in people 
         join pet in pets on person equals pet.Owner into gj      
         where !gj.Any() 
         select person; 

Я просто попробовал этот код, и кажется, это работает!

Я возвращаюсь к человеку Арлин, у нее нет домашних животных!

Может ли somene подтвердить, что это известный подход? Я только что придумал это LOL

+0

где ваш код? –

+0

Его тот же код из ссылки, которую я вставлял ... По-моему, эта ссылка не предлагает никакого реального объединения. Я просто хочу вернуть книги без заказов. – Elisabeth

+0

см. Мое обновление! ... – Elisabeth

ответ

1

Вы неправильно истолковываете, как работает левое соединение. a LEFT JOIN b будет возвращать все товары от a, независимо от того, имеют ли они соответствующие элементы в b. Если я правильно понимаю ваш вопрос, вам вообще не нужно присоединяться, потому что вы не хотите никаких дополнительных данных от bookOrders. Вы можете просто использовать метод All расширения LINQ в:

var query = bookList.Where(b => bookOrders.All(o => o.BookId != b.BookId).ToList(); 

Это будет возвращать все книги, для которых ни одна книга не содержит порядка ID книги. Я основываю имена в связанной статье.

+0

Да о левых совместных работах Я был неправ, но ты был прав. – Elisabeth

Смежные вопросы