Desglose en muchas consultas simples, y luego vuelva a poner esas consultas juntas. inicio
Vamos haciendo una secuencia de elementos que coinciden con el nombre de:
var nameMatches = from item in itemList where item.Name == p.Name select item;
tenemos que comparar esos artículos contra la secuencia de los nombres de los subpuntos del p. ¿Cuál es esa secuencia? Escribir una consulta:
var pnames = from subitem in p.SubItems select subitem.Name;
Ahora usted quiere encontrar todos los elementos de nameMatches donde la secuencia de los nombres de los partidos. ¿Cómo vas a obtener la secuencia de nombres? Bueno, acabamos de ver cómo hacer eso con pnames, también lo hacen la misma cosa:
var matches = from item in nameMatches
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where pnames.SequenceEqual(subitemNames)
select item;
y ahora quiere saber, ¿hay coincidencias?
return matches.Any();
Eso debería funcionar igual de bien. ¡Pero si quieres ser realmente aficionado, puedes escribir todo en una gran consulta!
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();
Y listo. ¡Muy fácil! Solo recuerde, divídalo en pequeños pasos, resuelva cada problema individualmente y luego junte la solución con los resultados pequeños.
realmente me he preguntado si esto ha sido escrito por alguien en el C# -team durante la lectura. resulta: ¡Eric Lippert está por supuesto en el equipo C#! – usr