C#Linq where子句作为变量

kds*_*253 43 c# linq linq-to-objects

我正在尝试创建一个LINQ语句,其中where子句来自变量.例如:

string whereClause = address.zip == 23456;
var x = from something in someList where whereClause;
Run Code Online (Sandbox Code Playgroud)

这可能吗?我似乎无法让它发挥作用.

谢谢,

更新 - 我的where子句是预定义的,将基于用户输入,所以我不认为这对我有用.基本上whereClause不是在方法中构造的,它是执行LINQ的方法的参数.我没有解释好这里是一个更好的例子:

public void doLnq(string whereClause)
{
   var x = from something in someList where whereClause;
   dowork(x);
}
Run Code Online (Sandbox Code Playgroud)

更新 - 只是总结一些建议并集中所有内容.

我不能使用开关来生成where子句,因为有很多可能性.

你们中的一些人发布的动态linq帖子确实看起来很有希望,但是我遇到麻烦将linq与sql示例相关联到我的linq to objects问题.

通过msdn查看和@sLaks http://msdn.microsoft.com/en-us/library/bb353734.aspx我无法确定你在哪里使用AsQueryable

谢谢,

SLa*_*aks 67

您需要组装Expression<Func<T, bool>>并将其传递给Where()扩展方法:

Expression<Func<T, bool>> whereClause = a => a.zip == 23456;
var x = frSomeList.Where(whereClause);
Run Code Online (Sandbox Code Playgroud)

编辑:如果您正在使用LINQ to Objects,请删除该单词Expression以创建普通委托.

  • http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx (3认同)

dtb*_*dtb 11

这个:

var query = from something in someList where whereClause;
Run Code Online (Sandbox Code Playgroud)

是简写:

var query = someList.Where(something => whereClause);
Run Code Online (Sandbox Code Playgroud)

假设someList是一个IEnumerable<Address>,Where指的是Enumerable.Where扩展方法.此方法需要Func<Address, bool>您可以定义如下:

Func<Address, bool> whereClause = address => address.Zip == 23456;
var query = someList.Where(whereClause);
Run Code Online (Sandbox Code Playgroud)