繁体   English   中英

如果所有键中都有空值,则删除字典吗?

[英]Remove a dictionary if all the keys has empty values in it?

我有一个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);
}

我需要删除这个

样品:

带有数据的示例字典,

在此处输入图片说明

如果以后要删除它,为什么将它添加到列表中?

但是,由于键是一个字符串,而值也是一个字符串,因此应该可以:

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() == ""));

一种解决方案:

 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);
  } 
}
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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM