2014-02-06 40 views
0

請幫助我用正確的謂詞邏輯。遏制的謂詞邏輯

我有一些產品的列表,我想在用戶指定的某些區域顯示。

我的產品類是下一個:

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

因此,如果用戶選擇區域,例如邏輯是未來,歐洲則所有產品以「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是一個列表我需要將其轉換爲字符串

我可以做類似.Intersect(p.regions.ToString()嗎?

回答

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) 
+0

您應該從lambda參數中刪除類型名稱。 – Magus

+0

@Magus是的好點。這是從變量聲明中推斷出來的。 –

+0

不好意思打擾了,但是我怎樣才能在lambda表達式中進行轉換? 查看我編輯的問題編號1 – Cheese