2011-04-14 89 views
4

我目前正在寻找一种方法,可以根据用户输入在运行时为我的Linq to SQL查询构建lambda表达式。我一直在网上寻找,但找不到任何有用的东西。如果有人能告诉我怎么做,或者有什么好的文章,请让我知道。非常感激!构建动态LINQ到Sql lambda表达式

例子:

比方说,我有这样的Linq查询:

var loc = (from l in Entity.Locations 
      select l).Where(a => a.LocationId > 5); 

可以这样表达a => a.LocationId > 5在运行时建的?取决于用户是否选择了LocationId。如果用户选择了名称,那么它将是a => a.Name == "bla"

我遇到了Scott的一篇文章,但我更喜欢一个解决方案,它允许我创建一个强类型表达式,我可以在编译时检测到任何可能的错误。

任何信息将不胜感激。

谢谢。

回答

2

您可以创建包含旧表达式的新LINQ表达式。

var loc = (from l in Entity.Locations select l); 

if (hasLocation) 
    loc = loc.Where(a => a.LocationId > 5); 

if (hasName) 
    loc = loc.Where(a => a.Name == "bla"); 

一旦你使用它的表达式只计算了,像var result = loc.ToList();

+0

凉爽。谢谢。我实际上正在考虑构建表达树,但不知道如何去做。这会做。谢谢 – developer 2011-04-14 06:40:24