在LINQ中使用字符串作为条件

时间:2014-11-17 07:45:14

标签: c# linq

考虑我有以下linq查询。我想将where子句中的条件指定为字符串,因为当我没有任何条件时我将使其为空。但是这样做我得到错误: " 无法将字符串转换为bool "。我知道错误的原因。我只想知道是否有其他替代方法可以实现以下内容。

var elements = from element in array
               orderby element descending
               where element > 2
               select element;

字符串条件="元素>" +2;

我想做以下事情......

var elements = from element in array
               orderby element descending
               where condition<------------            
                           select element;

PS:我会在没有条件的情况下处理这种情况,并且where子句没有条件。

提前致谢...

2 个答案:

答案 0 :(得分:1)

您可以将此条件拆分为两个,例如

   var elements = array.OrderByDescending(o => o);
   if (put some condition for active where )
         elements= elements.Where(o=>o>2); 

答案 1 :(得分:1)

编译器将查询语法转换为普通语法,因此您的示例等同于:

var elements = array.OrderByDescending(element => element).Where(element => element > 2);

OrderByDescendingWhere都会返回IEnumerable<T>Where的作用是插入Func<T, bool>作为过滤器,因此当您遍历可枚举时,它会为每个元素调用该函数,并在函数返回false时跳过该元素。如果您没有条件,可以直接拨打Where的电话:

var elements = array.OrderByDescending(element => element);

如果稍后您只需要选择某些元素,则可以将过滤器应用于元素:

elements = elements.Where(element => element > 2);

如果过滤器依赖于用户输入,则可以使用闭包(捕获外部变量的函数):

public Func<int, bool> CreateFilter(int value)
{
    // This returns a function that 'remembers' the given value:
    return element => element > value;
}

然后可以使用:

int userInput = 5;
elements = array.OrderByDescending(element => element).Where(CreateFilter(userInput));