2014-12-02 95 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); 
} 
相关问题