2016-11-12 9 views
3

jsonファイルに同じタイプのリストを渡していますが、jsonがそのノードにデータを期待している場合はすべてを返します。concatリストは必ずしもその中で評価されるわけではないので、リストを動的に構築する方法は必要ありません。Concatを使用してnullリストを動的に削除する方法

List<Asset> AllAssets = allAssets.Concat(_vheiclesList) 
           .Concat(_propertyList) 
           .Concat(_securedLoansAssets) 
           .Concat(_allSavings) 
           .Concat(_allPensions) 
           .Concat(_allOtherAssets) 
           .ToList(); 

たとえば、プロパティや節約がなかった場合、リストジョインは次のようになります。

List<Asset> AllAssets = allAssets.Concat(_vheiclesList) 
           .Concat(_securedLoansAssets) 
           .Concat(_allPensions) 
           .Concat(_allOtherAssets) 
           .ToList(); 

リストの各1は、タイプassetであると、私はまた、これらを削除するには、JSONを伝えることができる必要があるので、私はnullかどうかを確認するためにif文を経由して各1を追加する方法を必要とし、その後ドンそれを連結しないでください。

+0

私はリストが常に値、すなわちnullも持たないかもしれないと述べているが! –

+0

ああ、私は訂正しています...あなたは正しい先生です...早いです、私はもっとコーヒーが必要です。あなたの質問は大丈夫です - 私の謝罪は不正です。あなたがマイナーな編集をすることができますので、私は下の票を取り除くことができます---あなたがするまでそれが変更されることは許されないようです。 – David

+0

@rboe編集していただきありがとうございます...今すぐ解決しました – David

答えて

0

配列の配列を作成し、null配列をフィルタリングして(Where)、残りの配列を単一の配列(SelectMany)に戻して平坦化します。

List<Asset> AllAssets = new[] 
    { 
     allAssets, 
     _vheiclesList, 
     _propertyList, 
     _securedLoanAssets, 
     _allSavings, 
     _allPensions, 
     _allOtherAssets, 
    } 
    .Where(x => x != null) 
    .SelectMany(x => x) 
    .ToList(); 
+0

それは非常にいいですが、私は連絡が、このような自分のように自分自身を行うには十分にスマートだっただろうと思ったでしょうが、それはそうするように見えませんでした –

1

nullの値を処理する拡張メソッドを使用できます。例えば。

public static class EnumerableExtension 
    { 
     public static IEnumerable<TSource> ConcatOrDefault<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) 
     { 
      if (second == null) 
       return first; 
      return first.Concat(second); 
     } 
    } 

次に、あなたがnullの場合も今_propertyListまたは_allSavingsのような値

List<Asset> AllAssets = allAssets.ConcatOrDefault(_vheiclesList) 
          .ConcatOrDefault(_propertyList) 
          .ConcatOrDefault(_securedLoansAssets) 
          .ConcatOrDefault(_allSavings) 
          .ConcatOrDefault(_allPensions) 
          .ConcatOrDefault(_allOtherAssets) 
          .ToList(); 

にあなたの文を書き換えることができます。この場合、変更されていないシーケンスのみが返されます。

+0

これは非常に甘いですが、私はあなたがいつものようにいつものようにあなたは連絡先や既定の意志がまだ文字列にそれをinlcude言う? 。 –

0

最小限の変更ソリューションはnull合体演算子を使用することはおそらくです:私は問題が何であるかを述べている

List<Asset> AllAssets = allAssets 
    .Concat(_vheiclesList ?? Enumerable.Empty<Asset>()) 
    .Concat(_propertyList ?? Enumerable.Empty<Asset>()) 
    .Concat(_securedLoansAssets ?? Enumerable.Empty<Asset>()) 
    .Concat(_allSavings ?? Enumerable.Empty<Asset>()) 
    .Concat(_allPensions ?? Enumerable.Empty<Asset>()) 
    .Concat(_allOtherAssets ?? Enumerable.Empty<Asset>()) 
    .ToList(); 
+0

多くのありがとう私は存在しませんでした –

関連する問題