2015-10-05 103 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; 

我只是嘗試這樣的代碼,它似乎它的作品!

我退回了人阿琳她沒有寵物!

有人可以證實這是一種已知的方法嗎?我剛發明它LOL

+0

你的代碼在哪裏? –

+0

它與我粘貼的鏈接相同的代碼...在我看來,這個鏈接沒有提供真正的左連接。我只想在沒有訂單的情況下退還書籍。 – Elisabeth

+0

看到我的更新! ... – Elisabeth

回答

1

你誤解了左連接的工作原理。 a LEFT JOIN b將返回來自a的所有項目,無論它們是否具有b中的匹配項目。如果我正確理解您的問題,則根本不需要加入,因爲您不需要bookOrders的任何其他數據。你可以使用LINQ的All擴展方法:

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

這將返回其沒有一本書訂單包含該書的ID的所有書籍。我將這些名稱放在鏈接的文章上。

+0

是的,關於左連接工程我錯了,但你是對的。 – Elisabeth