连接QueryBuilder中带有或运算符的查询

时间:2011-09-24 16:10:53

标签: c# linq mvvm wcf-ria-services

QueryBuilder在Microsoft.Windows.Data.DomainServices中定义。 它允许您在类型T的集合上创建查询并稍后应用它。

当我需要通过&&来连接查询的位置时这很容易,例如你可以做到

        var query = new QueryBuilder<Customer>();

        if (!string.IsNullOrEmpty(this.CustomerFirstName))
            query = query.Where(c => c.FirstName == this.CustomerFirstName);

        if (!string.IsNullOrEmpty(this.CustomerLastName))
            query = query.Where(c => c.LastName == this.CustomerLastName);

        if (!string.IsNullOrEmpty(this.CustomerPhone))
            query = query.Where(c => c.Phone == this.CustomerPhone);

        if (!string.IsNullOrEmpty(this.CustomerMail))
            query = query.Where(c => c.Mail == this.CustomerMail);

我无法找到如何通过||连接那些查询的位置(或)...

我有一个查询,可以在数据库中加载所有产品,因为产品按类别进行组织,用户只能选择一个类别子集(他感兴趣的那个) 我想只加载用户指定的类别的产品

我知道我可以通过&amp;&amp;来连接Where()我排除未选择的类别 例子

 query.Where(c => c.CategoryName != "MyCategory");

但我不喜欢它。

我想在foreach循环中执行此操作

private void LoadProducts()
{
     var query = new QueryBuilder<Product>();

     //Get Only Products in specified categories
     if (!string.IsNullOrEmpty(WebContext.Current.User.SelectedCategoriesCSV))
     {

         foreach (string cat in WebContext.Current.User.SelectedCategoriesCSV.Split(';'))
         {
               ????//query.Where(c => c.CategoryName == cat || );
         }

     }

 .....

3 个答案:

答案 0 :(得分:0)

您需要动态构建 where 表达式,然后将其传递给query.Where()。查看提供Or方法的PredicateBuilder来完成该操作。希望这会有所帮助。

答案 1 :(得分:0)

您可以使用此链接提供的Dynamic LINQ运算符: http://msdn.microsoft.com/en-us/bb330936.aspx (下载c#示例并获取\ LinqSamples \ DynamicQuery目录中的代码)

答案 2 :(得分:0)

您可以使用 Monty's Gush 开发的PredicateBuilder课程。

尝试this