C# 如果所有键中都有空值,是否删除字典?
我有一个C# 如果所有键中都有空值,是否删除字典?,c#,list,dictionary,ienumerable,C#,List,Dictionary,Ienumerable,我有一个列表。如果所有键中都有空值,我需要从列表中删除字典。这是我的代码和示例 foreach (int rowval in rowscol) { Dictionary<string, object> Data = new Dictionary<string, object>(); foreach (Contracts.CommonDataField field in finalColumns) { var valList = record.Co
列表
。如果所有键中都有空值,我需要从列表中删除字典。这是我的代码和示例
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);
}
foreach(rowscol中的int-rowval)
{
字典数据=新字典();
foreach(finalColumns中的Contracts.CommonDataField字段)
{
var valList=record.CommonDataValues.FirstOrDefault(row=>row.RowID==rowval&&row.FieldName==field.FieldName);
if(valList!=null)
{
字符串值=valList.RecordFieldData;
Data.Add(field.FieldName,value);
}
}
添加(数据);
}
我需要把这个拿走
带数据的示例字典
如果以后要删除它,为什么要将其添加到列表中 但是,由于键是一个字符串,值也是一个字符串,因此应该可以:
finaldata = finaldata
.Where(d => d.Values.Cast<string>().Any(str => !String.IsNullOrEmpty(str)))
.ToList();
如果以后还要删除它,为什么要将其添加到列表中 但是,由于键是一个字符串,值也是一个字符串,因此应该可以:
finaldata = finaldata
.Where(d => d.Values.Cast<string>().Any(str => !String.IsNullOrEmpty(str)))
.ToList();
一个解决方案:
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(rowscol中的int-rowval)
{
bool hasNonNullValue=false;
字典数据=新字典();
foreach(finalColumns中的Contracts.CommonDataField字段)
{
var valList=record.CommonDataValues.FirstOrDefault(row=>row.RowID==rowval&&row.FieldName==field.FieldName);
if(valList!=null)
{
字符串值=valList.RecordFieldData;
Data.Add(field.FieldName,value);
if(值!=null){
hasNonNullValue=true;
}
}
}
if(hasNonNullValue){
添加(数据);
}
}
一种解决方案:
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(rowscol中的int-rowval)
{
bool hasNonNullValue=false;
字典数据=新字典();
foreach(finalColumns中的Contracts.CommonDataField字段)
{
var valList=record.CommonDataValues.FirstOrDefault(row=>row.RowID==rowval&&row.FieldName==field.FieldName);
if(valList!=null)
{
字符串值=valList.RecordFieldData;
Data.Add(field.FieldName,value);
if(值!=null){
hasNonNullValue=true;
}
}
}
if(hasNonNullValue){
添加(数据);
}
}
foreach(rowscol中的int-rowval)
{
字典数据=新字典();
bool empty=true;
foreach(finalColumns中的Contracts.CommonDataField字段)
{
var valList=record.CommonDataValues.FirstOrDefault(row=>row.RowID==rowval&&row.FieldName==field.FieldName);
if(valList!=null)
{
字符串值=valList.RecordFieldData;
Data.Add(field.FieldName,value);
如果(!String.IsNullOrEmpty(value))为空=false;
}
}
如果(!空)finaldata.Add(数据);
}
foreach(rowscol中的int-rowval)
{
字典数据=新字典();
bool empty=true;
foreach(finalColumns中的Contracts.CommonDataField字段)
{
var valList=record.CommonDataValues.FirstOrDefault(row=>row.RowID==rowval&&row.FieldName==field.FieldName);
if(valList!=null)
{
字符串值=valList.RecordFieldData;
Data.Add(field.FieldName,value);
如果(!String.IsNullOrEmpty(value))为空=false;
}
}
如果(!空)finaldata.Add(数据);
}
如果以后要删除它,为什么要将其添加到列表中?问题是有时某些键可能有值,因为数据是动态添加的,所以无法检查。您是否在寻找比明显的“迭代列表”更优雅的解决方案,创建空字典的集合,然后进行第二次扫描以删除它们“?@Sajeetharan在将字典添加到列表之前,您可以进行检查。@user469104任何不应包含所有键均为空值的字典的解决方案如果以后仍要删除它,您为什么要将其添加到列表中?问题有时是一些键可能有值,因为数据是动态添加的,所以无法进行检查。您是否在寻找比明显的“迭代列表”更优雅的解决方案,创建空词典的集合,然后进行第二次扫描以删除它们“?@Sajeetharan在将词典添加到列表之前,您可以进行检查。@user469104任何不应包含所有键均为空值的词典的解,实际上该值是词典中的对象
。@juharr:因此我使用了Cast
(如果你看代码,它是一个字符串)。实际上,这个值是字典中的一个对象。@juharr:因此我使用了Cast
(如果你看代码,它是一个字符串)。
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);
}