C#, Linq OrderBy filtrage null ou vide de valeurs dernière
J'essaie de faire de mon custom orderby extension de la méthode, j'ai travaillé avec succès mon code, mais en plus j'ai envie de liste null ou vide ou zéro dernières valeurs en conséquence, quelqu'un peut m'aider sur cette question ?
Voici ma méthode d'extension pour orderby
public static IQueryable<T> OrderBy<T>(this IQueryable<T> q, string SortField, bool isAsc)
{
//var nullExpr = Expression.Constant(null, typeof(T));
var param = Expression.Parameter(typeof(T), "p");
var prop = Expression.Property(param, SortField);
var exp = Expression.Lambda(prop, param);
string method = isAsc ? "OrderBy" : "OrderByDescending";
Type[] types = new Type[] { q.ElementType, exp.Body.Type };
var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);
return q.Provider.CreateQuery<T>(mce);
}
Merci d'avance
Vous devez vous connecter pour publier un commentaire.
Sans l'aide d'une méthode d'extension....
Créer un personnalisé
IComparer<string>
pour vérifier les valeurs vides avant d'utiliser la valeur par défautString.Compare
. La première recherche renverra -1 au lieu de 1 ou de 1 au lieu de -1, si en utilisant le standard de comparaison de chaînes de caractères.Passer votre
EmptyStringsAreLast
comparer dans leOrderBy
de l'expression Lambda. Dans cette solution, les équipes qui ont participé à la course devrait apparaître par ordre alphabétique, mais les non affiliés, la race entrées doit apparaître à la fin.La façon la plus simple est d'utiliser
Cela ne nécessite aucune méthode d'extension ou de la coutume
IComparer
mise en œuvre, etc..ThenBy(e => e.TeamName)
, trop..OrderBy(e => String.IsNullOrEmpty(e.TeamName))
ne sorte par le résultat booléen et non pas par le contenu lui-même.Cette réponse est peut-être ce que vous étiez à l'origine à la recherche pour - à l'aide de votre générique de la méthode d'extension:
Bâtiment sur Dave Anson l' réponse, vous pouvez l'utilisateur Comparer.Créer() pour créer le Comparer à partir d'un lambda. Voici un exemple qui trie
unsorted
par sonmyString
les champs de type chaîne, avecnull
ou des chaînes vides figurant dernier.(À mettre tout d'abord, mettre les panneaux sur le
1
constantes)ça fonctionne pour moi: