首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ to SQL - PredicateBuilder

LINQ to SQL - PredicateBuilder
EN

Stack Overflow用户
提问于 2010-10-28 09:49:21
回答 2查看 2.5K关注 0票数 1

关于如何从PredicateBuilder中获得更多信息的快速问题。它的工作原理如下:

代码语言:javascript
复制
IQueryable<Product> SearchProducts (params string[] keywords)
{
  var predicate = PredicateBuilder.False<Product>();

  foreach (string keyword in keywords)
  {
    string temp = keyword;
    predicate = predicate.Or (p => p.Description.Contains (temp));
  }
  return dataContext.Products.Where (predicate);
}

问题是,如果我也想按任意成员进行搜索,例如,传递函数string[]作为关键字,但也传递要搜索的字段,例如fieldToSearch,并用允许按fieldToSearch进行搜索的内容替换临时字段( p=> p.Description.Contains(Temp)),该怎么办?

这是可能的吗?这是个坏主意吗?

EN

回答 2

Stack Overflow用户

发布于 2010-10-28 09:52:16

对于您想要做的事情,Dynamic Linq可能更合适。

虽然编写类型安全查询在大多数情况下都很棒,但在某些情况下,您希望能够灵活地动态构造查询。例如:您可能希望在应用程序中提供业务智能UI,从而允许最终用户业务分析师使用下拉菜单在数据之上构建和表达他们自己的自定义查询/视图。传统上,这些类型的动态查询场景通常通过将字符串连接在一起来构造动态SQL查询来处理。最近,一些人给我发了邮件,询问如何使用LINQ处理这些类型的场景。下面的帖子描述了如何使用LINQ团队提供的动态查询库来动态构造LINQ查询。

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

票数 1
EN

Stack Overflow用户

发布于 2010-10-28 09:58:09

为什么不使用一个单独的方法将Expression<Func<Product,bool>>作为参数。然后在方法外部构建谓词,并将其作为参数传递。

代码语言:javascript
复制
IQueryable<Product> SearchProducts (Expression<Func<Product,bool>> selector )
{
    return dataContext.Products.Where( selector );
}

用作

代码语言:javascript
复制
var selector = PredicateBuilder.False<Product>()
                               .Or( p => p.Name == name )
                               .Or( p => p.Vendor == vendor );

products = repository.SearchProducts( selector );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4039111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档