per scopi didattici ho cercato di convertire la seguente espressione Linq dal libro "Linq in azione" in VB.netLinq non lo fa gruppo in VB.Net
Original C#
var list =
from book in SampleData.Books
group book by new { book.Publisher.Name, book.Subject }
into grouping
select new {
Publisher = grouping.Key.Publisher,
Subject = grouping.Key.Subject,
Book = grouping
};
Il mio tentativo:
Dim list = _books.GroupBy(Function(book) New With {.Publisher = book.Publisher.Name,
book.Subject}).
Select(Function(grouping) New With {.Publisher = grouping.Key.Publisher,
.Subject = grouping.Key.Subject,
.Books = grouping})
For Each item In list
Console.WriteLine("Publisher:" & item.Publisher & ", Subject:" & item.Subject)
For Each Book In item.Books
Console.WriteLine(" " & Book.Title)
Next
Next
Questo porta alla seguente output:
Publisher:FunBooks, Subject:Fun
Funny Stories
Publisher:Joe Publishing, Subject:Work
LINQ rules
Publisher:Joe Publishing, Subject:Work
C# on rails
Publisher:Joe Publishing, Subject:Fun
All your base are belong to us
Publisher:FunBooks, Subject:Fun
Bonjour mon Amour
Mi aspettavo che i libri "LINQ rules" e "C# on rails" fossero raggruppati così come i libri "Funny Stories" e "Bonjour mon Amour" perché hanno lo stesso editore e soggetto. La mia chiave anonima è costituita da un nuovo oggetto costituito da due semplici stringhe.
Ho già provato a cercare in SO, ma le risposte other (or) non risolvono il mio problema. Anche alcuni traduttori di codici come telerik o carlosag non sono di aiuto in questo caso.
Si Questa grande opera; molte grazie! Wow, una risposta di Jon Skeet stesso. Mi sento onorato. :-) – Markus
Ho verificato la mia query non riuscita a causa di questo in LINQPad e ho utilizzato una fonte LINQ to Entities. Nel mio codice sto effettivamente materializzando la query (ToList) e eseguendo la query di gruppo da quella in quanto devo fare alcuni calcoli per riga nel frattempo. Questo mi porta a credere che questo sia un problema in LINQ to Objects ma non LINQ to Entities. Suppongo che ciò avverrebbe perché in LINQ alle Entità, l'espressione di raggruppamento è tradotta in TSQL mentre in LINQ agli Oggetti, il codice hash viene utilizzato per l'uguaglianza delle chiavi di gruppo. Questo suono è corretto? – pseudocoder
@pseudocoder: No, non si tratta del codice hash, ma di quali proprietà vengono utilizzate per determinare l'uguaglianza. Sembra che LINQ to Entities consideri * tutte * le proprietà come proprietà chiave ... che suona come un bug per me. Questo non è un "problema" in LINQ to Objects: è solo questione di come funzionano i tipi anonimi in VB. –