2014-12-02 1 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); 
} 

나는 제거 할 경우

enter image description here

+0

왜 목록에 추가하는 방법은 무엇입니까? –

+0

문제는 일부 키가 값을 가질 수 있기 때문에 데이터가 동적으로 추가되므로 확인할 방법이 없습니다. – Sajeetharan

+0

명백한 '목록 반복, 빈 사전 컬렉션 생성 및 제거를위한 두 번째 청소'보다 더 우아한 솔루션을 찾고 계십니까? – user469104

답변

3

왜 목록에 추가 할 데이터와이

Sample:

샘플 사전을 제거해야 어쨌든 나중에? 키가 문자열이고 값도 문자열이기 때문에

그러나이 작동합니다 :

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

+0

@juharr : 따라서'Cast '을 사용했습니다 (코드를 보면 문자열입니다). –

+0

@TimSchmelter 감사합니다. 작동합니다! – Sajeetharan

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

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); 
} 
관련 문제