Prenons l'exemple suivant:Comportement problématique de Linq Union?
public IEnumerable<String> Test()
{
IEnumerable<String> lexicalStrings = new List<String> { "test", "t" };
IEnumerable<String> allLexicals = new List<String> { "test", "Test", "T", "t" };
IEnumerable<String> lexicals = new List<String>();
foreach (String s in lexicalStrings)
lexicals = lexicals.Union (allLexicals.Where (lexical => lexical == s));
return lexicals;
}
je l'espérais pour produire « test », « t » en sortie, mais il n'a pas (La sortie est seulement « t »). Je ne suis pas sûr, mais peut devoir faire quelque chose avec le traitement différé. Des idées pour que cela fonctionne ou pour une bonne alternative?
Editer: Veuillez noter qu'il ne s'agit que d'un exemple simplifié. lexicalStrings
et allLexicals
sont différents types dans le code d'origine. Donc je ne peux pas les combiner directement.
Edit2 le problème à résoudre ressemble plus à ceci:
public IEnumerable<Lexical> Test()
{
IEnumerable<String> lexicalStrings = new List<String> { "test", "t" };
IEnumerable<Lexical> allLexicals = new List<Lexical> { ... };
IEnumerable<Lexical> lexicals = new List<Lexical>();
foreach (String s in lexicalStrings)
lexicals = lexicals.Union (allLexicals.Where (lexical => lexical.Text == s));
return lexicals;
}
Merci pour l'explication et la solution facile! Up et répondu. – Foxfire
J'ai pensé à utiliser AddRange, mais cela entraîne des doublons dans la liste (que l'Union devrait éviter automatiquement). – Foxfire
@Foxfire vous devriez vraiment utiliser intersection, il résout le problème – Andrey