Scomposizione in molte query semplici e quindi ricomporre quelle query. inizio
Let facendo una sequenza di elementi che corrispondono al nome:
var nameMatches = from item in itemList where item.Name == p.Name select item;
Abbiamo bisogno di confrontare le voci contro la sequenza dei nomi a elementi secondari di p. Qual è quella sequenza? Scrivere una query:
var pnames = from subitem in p.SubItems select subitem.Name;
Ora si desidera trovare tutti gli elementi da nameMatches in cui la sequenza dei nomi partite. Come hai intenzione di ottenere la sequenza di nomi? Beh, abbiamo appena visto come fare con pnames, in modo da fare la stessa cosa:
var matches = from item in nameMatches
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where pnames.SequenceEqual(subitemNames)
select item;
e ora si vuole sapere, ci sono le partite?
return matches.Any();
Che dovrebbe funzionare bene così com'è. Ma se vuoi essere davvero appassionato puoi scrivere il tutto in un'unica grande query!
return (
from item in itemList
let pnames =
(from psubitem in p.SubItems select psubitem.Name)
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where item.Name == p.Name
where pnames.SequenceEqual(subitemNames)
select item).Any();
E il gioco è fatto. Facile come torta! Basta ricordare, scomporlo in piccoli passi, risolvere ogni problema individualmente e quindi mettere insieme la soluzione dei piccoli risultati.
fonte
2009-06-16 06:53:28
Mi sono davvero chiesto se questo è stato scritto da qualcuno sul C# -team durante la lettura. scopre: Eric Lippert è ovviamente sul C# -team! – usr