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

时间:2010-11-25 10:11:06

标签: c# linq linq-to-sql sql-order-by

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

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

是否可以编写此类查询?

3 个答案:

答案 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....);
}
相关问题