2017-06-13 72 views
0

我努力讓我的腦袋圍繞任何vs全部和多個選擇的邏輯 我有一個模型,這是從Xelement映射,我想檢查,如果多個屬性有一個值(即是一個有效的請求的指標),但低於我的支票不斷返回false(儘管我知道他們有值)Lambda邏輯 - 多次檢查

if(!electronicObject.MetaData.All(x=> x.Name.ToLower() == "parcel id" || 
               x.Name.ToLower() == "parcel type" ||               x.Name.ToLower() == "street name" || 
                 x.Name.ToLower() == "street designation" || 
                 x.Name.ToLower() == "parcel status")) 
+0

'All'意味着列表中的每個項目都必須通過的條件。即使一件物品沒有,它也會返回假。即使一件商品通過了條件,「任何」都意味着返回true。我想你想'where',因爲它會返回所有通過條件的項目。 – CodingYoshi

回答

0

在你的代碼的檢查,如果在元數據中的所有元素都被命名爲「包裹ID」,「包裹類型「,」街道名稱「,」街道地址「或」包裹狀態「。因此,如果您的元數據包含5個元素和1個元素,例如「某些東西」,則您的支票將失敗。

也許你想達到什麼是檢查你有任何的集合中可用的那些屬性:

if(electronicObject.MetaData.Any(x=> x.Name.ToLower() == "parcel id" || 
             x.Name.ToLower() == "parcel type" || 
             x.Name.ToLower() == "street name" || 
             x.Name.ToLower() == "street designation" || 
             x.Name.ToLower() == "parcel status")) 
{ 
    //your object is probably correct, as it has at least one correct metadata element. 
} 

這種情況將返回true,即使對於那些不完全收集:「富」,「酒吧「,」街道地址「仍然是正確的。我不知道這是你想要的

+0

ahhhh我和你在一起,謝謝 – Damage

0

就像@CodingYoshi說,看起來你可能更喜歡Any而不是All

因此,你能說出這樣的:

var categories = new[]{ 
    "parcel id", 
    "parcel type", 
    "street name", 
    "street designation", 
    "parcel status" 
}; 
var condition = electronicObject.MetaData 
           .Any(x => categories.Contains(x.Name.ToLower())); 
if(!condition) 
{ 
    //blah 
}