遏制的谓词逻辑

时间:2014-02-06 20:53:59

标签: c# predicate

请用正确的谓词逻辑来帮助我。

我想要在用户指定的某些地区展示一些产品列表。

我的产品类是下一个:

 public class Product
 {
    public int id { get; set; }
    public string name { get; set; }
    public List<string> regions { get; set; }
 }

我的设置类是:

public class LocalSettings
{
    public List<string> Regions { get; set; }
}

因此,如果用户选择了Region,那么逻辑就是下一个,例如,Europe,那么必须选择包含“Europe public List<string> regions”的所有产品。

我应该如何正确地在谓词中写这个?

这是我的起点:

Predicate<Product> ProductFinder = (Product p) => { return DataManager.Instance.CurrentSettings.Regions.Contains(//HERE MUST BE ANY OF p.regions); };

编辑问题编号1:

感谢帮助,我写了这个:

Predicate<Salesplay> SalesPlaysFinder = (Salesplay p) => { return DataManager.Instance.CurrentSettings.Regions.Intersect(p.regions).Any(); };

但是我的p.regions是一个List我需要将它转换为字符串

我可以做像.Intersect(p.regions.ToString()?

这样的事情

1 个答案:

答案 0 :(得分:2)

如果我理解您的问题,您可以使用AnyContains这样的方法:

Predicate<Product> ProductFinder = p => 
    DataManager.Instance.CurrentSettings.Regions.Any(r => p.regions.Contains(r))

或者您可以使用IntersectAny这样的方法:

Predicate<Product> ProductFinder = p => 
    DataManager.Instance.CurrentSettings.Regions.Intersect(p.regions).Any()

对于您更新的问题,如果您想测试列表中是否有单个字符串,请单独使用Contains

Predicate<Salesplay> SalesplayFinder = p => 
    DataManager.Instance.CurrentSettings.Regions.Contains(p.region)