2010-10-14 7 views
1

J'ai une requête linq simple qui unit deux tables qui implémentent la même interface.C# Linq Union Returning Null

Pour cet exemple, disons IAnimal. Donc, si la partie chien n'a pas de membres, on lui assigne {"", {tout ce qui est dans cat}}. Y at-il un moyen de supprimer cet enregistrement vide sans faire .Where(x=>x!="" | x!= String.Empty) après la requête?

Je sais que ce n'est pas un gros problème, mais il semble qu'il devrait y avoir un meilleur moyen?

+1

Je ne comprends pas pourquoi vous obtenez la chaîne vide de la requête Dogs. S'il n'y a aucun chien correspondant alors vous devriez avoir un ensemble vide, pas un ensemble d'une seule chaîne vide, et alors vous ne devriez pas avoir à faire votre clause where. – Enigmativity

Répondre

1

Comment est-ce que ce n'est pas un bon moyen? Qu'est-ce qui va pas avec ça?

Eh bien ... il y a une chose qui ne va pas. Si doit être:

.Where(x => !string.IsNullOrEmpty(x)) 

Si vous utilisez Entity Framework ou un autre fournisseur de LINQ qui ne peut pas gérer IsNullOrEmpty alors le code doit être:

.Where(x => x != null && x != "") 

Votre code à l'aide | au lieu de && et contrôles contre la chaîne vide deux fois mais jamais nulle.

+1

Sa syndicalisation rien avec quelque chose et puis la numérisation du quelque chose pour choisir le rien. Il semble qu'il serait préférable de déterminer qu'il n'y a rien, puis de retourner l'autre côté de l'union. Peut-être que cela fonctionne dans la génération SQL. Ce n'est pas un gros problème comme je l'ai dit, il semble juste qu'il devrait y avoir un moyen de faire le chèque, puis l'union au lieu de faire un syndicat, puis un chèque. – Shawn

+1

Comment savez-vous ce que fait LINQ? Linq pourrait très bien ne pas énumérer vos objets jusqu'à ce que plus tard, il peut de toute façon jeter le premier ensemble. De plus, faire un syndicat est essentiellement gratuit. Il énumère juste le premier ensemble, puis énumère le second ensemble. Ce n'est pas ** comme des chaînes de concaténation. – tster

+0

Et juste un fyi, string.IsNullOrEmpty() n'a pas de traduction en Sql. Je sais que je ne l'ai pas précisé. – Shawn