2014-12-02 115 views
0

我有一個List<Dictionary<string, object>>。如果所有鍵都有空值,我需要從該列表中刪除字典。這是我的代碼和示例。刪除字典,如果所有的鍵都有空的值?

foreach (int rowval in rowscol) 
{ 
    Dictionary<string, object> Data = new Dictionary<string, object>(); 
    foreach (Contracts.CommonDataField field in finalColumns) 
    { 
    var valList = record.CommonDataValues.FirstOrDefault(row => row.RowID == rowval && row.FieldName == field.FieldName); 
    if (valList != null) 
    { 
    string value = valList.RecordFieldData; 
    Data.Add(field.FieldName, value); 
    } 
    } 
finaldata.Add(Data); 
} 

我需要刪除該

Sample:

與數據樣本字典,

enter image description here

+0

爲什麼你,如果你想在以後反正刪除它添加到列表中? – 2014-12-02 13:36:16

+0

問題是有時一些鍵可能有值,因爲數據是動態添加的,所以無法檢查。 – Sajeetharan 2014-12-02 13:37:36

+0

您是否在尋找比明顯的'迭代列表更精美的解決方案,創建空字典集合,然後再次執行刪除操作'? – user469104 2014-12-02 13:38:04

回答

3

爲什麼你,如果你想刪除它添加到列表無論如何呢?

然而,由於鍵是一個字符串,值也是一個字符串這應該工作:

finaldata = finaldata 
    .Where(d => d.Values.Cast<string>().Any(str => !String.IsNullOrEmpty(str))) 
    .ToList(); 

finaldata.RemoveAll(d => d.Values.Cast<string>().All(String.IsNullOrEmpty)); 

如果它總是一個字符串,我會使用在List<Dictionary<string, string>>第一個地方。如果值的類型可以是不同的東西,你可以使用:

finaldata.RemoveAll(d => d.Values.All(obj => obj == null || obj.ToString() == "")); 
+0

實際上,該值是字典中的「對象」。 – juharr 2014-12-02 13:40:20

+0

@juharr:因此我用'Cast '(這是一個字符串,如果你看看代碼)。 – 2014-12-02 13:41:40

+0

@TimSchmelter謝謝,它的工作原理! – Sajeetharan 2014-12-02 13:47:02

1

一個解決方案:

foreach (int rowval in rowscol) 
{ 
    bool hasNonNullValue = false; 
    Dictionary<string, object> Data = new Dictionary<string, object>(); 
    foreach (Contracts.CommonDataField field in finalColumns) 
    { 
    var valList = record.CommonDataValues.FirstOrDefault(row => row.RowID == rowval && row.FieldName == field.FieldName); 
    if (valList != null) 
    { 
    string value = valList.RecordFieldData; 
    Data.Add(field.FieldName, value); 
    if (value != null) { 
     hasNonNullValue = true; 
    } 
    } 
    } 
    if (hasNonNullValue) { 
    finaldata.Add(Data); 
    } 
} 
+0

是的,應該做到這一點! – Sajeetharan 2014-12-02 13:52:10

1
foreach (int rowval in rowscol) 
{ 
    Dictionary<string, object> Data = new Dictionary<string, object>(); 
    bool empty = true; 
    foreach (Contracts.CommonDataField field in finalColumns) 
    { 
     var valList = record.CommonDataValues.FirstOrDefault(row => row.RowID == rowval && row.FieldName == field.FieldName); 
     if (valList != null) 
     { 
      string value = valList.RecordFieldData; 
      Data.Add(field.FieldName, value); 
      if(!String.IsNullOrEmpty(value)) empty = false; 
     } 
    } 
    if (!empty) finaldata.Add(Data); 
} 
相關問題