LINQ:如何在linq中动态使用ORDER BY,但仅限于变量不是string.empty或null

我正在使用LINQ2SQL,它的工作非常好。 但是,根据C#中变量类型字符串的值,我需要在查询中使用“Order By”或不使用“order by”。

如果C#字符串不为null或为空,那么我想对字符串变量的内容进行“排序依据”。 如果C#字符串为空或为null,那么我不包含顺序。

是否可以编写这种查询?

在VVS的答案中也喜欢,但是如果你想传递列名进行排序,你可能想要使用这个扩展方法而不是内置的OrderBy方法:

public static IOrderedQueryable OrderBy(this IQueryable query, string memberName) { ParameterExpression[] typeParams = new ParameterExpression[] { Expression.Parameter(typeof(T), "") }; System.Reflection.PropertyInfo pi = typeof(T).GetProperty(memberName); return (IOrderedQueryable)query.Provider.CreateQuery( Expression.Call( typeof(Queryable), "OrderBy", new Type[] { typeof(T), pi.PropertyType }, query.Expression, Expression.Lambda(Expression.Property(typeParams[0], pi), typeParams)) ); } 

分两步完成:

 var query = from .. in .. where .. select ..; if (!string.IsNullOrEmpty(someVariable)) { query = query.OrderBy((..) => ..); } 

让C#测试列表的内容,只有在它不包含null时才执行命令。

 var myList = (from s in dataContect.Users select s).ToList(); bool containsNull = false; foreach (var item in mylist) { if (string.IsNullOrEmpty(item.LastName)) { containsNull = true; } } if (!containsNull) { // If is not contains null, Use Order By myList = myList.OrderBy(k => k....); }