我正在使用LINQ2SQL并且它的表现相当不错。然而,根据C#中字符串类型变量的值,我需要在我的查询中使用“Order By”或不使用“order by”。
如果C#字符串不为空,则我想按照字符串变量的内容进行“排序”。如果C#字符串为空,则不包括“order by”。
是否可能编写此类查询?
我正在使用LINQ2SQL并且它的表现相当不错。然而,根据C#中字符串类型变量的值,我需要在我的查询中使用“Order By”或不使用“order by”。
如果C#字符串不为空,则我想按照字符串变量的内容进行“排序”。如果C#字符串为空,则不包括“order by”。
是否可能编写此类查询?
分两步来完成:
var query = from .. in .. where .. select ..;
if (!string.IsNullOrEmpty(someVariable))
{
query = query.OrderBy((..) => ..);
}
按照VVS的回答进行操作,但如果你想要传递列名进行排序,你可能需要使用这个扩展方法而不是内置的OrderBy方法:
public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> query, string memberName)
{
ParameterExpression[] typeParams = new ParameterExpression[] { Expression.Parameter(typeof(T), "") };
System.Reflection.PropertyInfo pi = typeof(T).GetProperty(memberName);
return (IOrderedQueryable<T>)query.Provider.CreateQuery(
Expression.Call(
typeof(Queryable),
"OrderBy",
new Type[] { typeof(T), pi.PropertyType },
query.Expression,
Expression.Lambda(Expression.Property(typeParams[0], pi), typeParams))
);
}
让 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....);
}