在QueryBuilder中连接带有或操作符的查询

本文关键字:操作符 查询 QueryBuilder 连接 | 更新日期: 2023-09-27 18:09:47

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);

我找不到我应该如何连接那些查询||(或)??

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

我知道我可以用&&连接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 || );
         }
     }
 .....

在QueryBuilder中连接带有或操作符的查询

您需要动态构建where表达式,然后将其传递一次给query.Where()。请查看提供Or方法来完成此操作的PredicateBuilder。

你可以使用动态LINQ操作符:http://msdn.microsoft.com/en-us/bb330936.aspx(下载c#示例并在'LinqSamples'DynamicQuery目录中获取代码)

您可以使用Monty 's rush开发的PredicateBuilder

试试这个。