2017-06-13 74 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 
}