我正在使用LINQ2SQL并且它的工作非常好。但是,根据C#中变量类型字符串的值,我需要在查询中使用“Order By”或不使用“order by”。
如果C#字符串为非null或为空,那么我想对字符串变量的内容进行“排序依据”。如果C#字符串为空或为null,则表示我不包含订单。
是否可以编写此类查询?
答案 0 :(得分:2)
分两步完成:
var query = from .. in .. where .. select ..;
if (!string.IsNullOrEmpty(someVariable))
{
query = query.OrderBy((..) => ..);
}
答案 1 :(得分:2)
在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))
);
}
答案 2 :(得分:0)
让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....);
}