构建动态linq到Sql lambda表达式

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

例:

假设我有这个Linq查询:

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

这个表达式可以a => a.LocationId> 5是在运行时构建的吗?取决于用户是否选择了LocationId.如果用户选择了Name,那么它将是a => a.Name ==“bla”.

我看过斯科特的一篇文章,但我更喜欢一个允许我创建一个强类型表达式的解决方案,我可以在编译时检测到任何可能的错误.

任何信息将不胜感激.

谢谢.

最佳答案 您可以创建包含旧表达式的新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();

点赞