2017-06-13 14 views
0

私はすべてのvsすべてと複数の選択のロジックを頭に浮かべるのに苦労しています Xelementからマッピングされたモデルがあり、複数の属性に値があるかどうかをチェックしたい有効な要求の指標)が、以下の私のチェックは、メタデータ内のすべての要素が小包」、「パーセルID」と命名されている場合は、チェックしている)私は、彼らが値を持って知っているにもかかわらず(falseを返すあなたのコードでラムダロジック - 複数のチェック

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'は、リスト内のすべてのアイテムは、条件に合格しなければならないことを意味します。 1つの項目がそうでない場合でも、falseを返します。 'Any'は、ある項目が条件をパスしたとしてもtrueを返します。私は条件に合格したすべてのアイテムを返すので、あなたはどこにいたいと思うのですか? – CodingYoshi

答えて

0

を保持します「住所」、「住所」、「小包の状態」のいずれかである。したがって、メタデータに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を返します: "、「foo」というバー "、"住所 "はまだ正しいです。これがあなたの望むものなのかどうか分かりません

+0

ああ、私はあなたと一緒にいます、ありがとう – Damage

0

@CodingYoshiと同様、AllではなくAnyを好むかもしれません。このように

、あなたはこのようにそれを述べることができます:

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 
} 
関連する問題