如何过滤此LINQ查询

时间:2016-05-20 10:32:31

标签: c# linq

我得到一个查询,我想过滤掉存储在字符串数组中的一些值。

查询:

public IQueryable<ProductModel> GetProductQuery()
{
   var query = from product in DataContext.tProduct
               select new ProductModel() {
                  ProductId = product.ProductId,
                  ProductName = product.ProductName,
                  Categories = product.tLinkProductCategory.Select(c => new CategoryModel
                  {
                     CategoryID = c.tCategory.CategoryId,
                     CategoryName = c.tCategory.CategoryName
                  })
               };
   string[] categories = new[] {"A", "B"};
   query = query.Where(c => categories.Contains(c.Categories.CategoryName..)) //??
   return query;
}

我可以用.Contains解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

使用Any Linq扩展名即可实现此目标。

 query = query.Where(c => categories.Any(x=> x == c.Categories.CategoryName));

如果有选择,我更喜欢使用HastSet而不是字符串数组,这允许进行O(1)访问。当规模变大时,您可能会看到性能大幅提升。

 HashSet<string> categories  = new HashSet<int>(); 
 query = query.Where(c => categories.Contain(c.Categories.CategoryName));

答案 1 :(得分:1)

@Hari Prasad是关于Server = "swipe.example.com"; Username = "example@swipe.example.com"; Password = <Some Password>; DatabasePath = "swipe.example.com/database.sqlite"; 的,但正确的查询是:

Any