请用正确的谓词逻辑来帮助我。
我想要在用户指定的某些地区展示一些产品列表。
我的产品类是下一个:
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()?
这样的事情答案 0 :(得分:2)
如果我理解您的问题,您可以使用Any
和Contains
这样的方法:
Predicate<Product> ProductFinder = p =>
DataManager.Instance.CurrentSettings.Regions.Any(r => p.regions.Contains(r))
Predicate<Product> ProductFinder = p =>
DataManager.Instance.CurrentSettings.Regions.Intersect(p.regions).Any()
对于您更新的问题,如果您想测试列表中是否有单个字符串,请单独使用Contains
:
Predicate<Salesplay> SalesplayFinder = p =>
DataManager.Instance.CurrentSettings.Regions.Contains(p.region)