2013-09-26 43 views
1

以下是目前正在工作但我需要應用WHERE子句,我未能實現。當前的代碼如下所示。我的嘗試顯示在當前代碼行的下方。編譯器抱怨「不能轉換表達式類型IEnumerablestring,double>返回類型'bool'」。有什麼建議麼!? 非常感謝,如何將where子句應用於特定的集合

工作代碼

return new GroupedDataCollection(data.SummaryValuations.Select(d => new GroupedData(d))); 

嘗試

return new GroupedDataCollection(data.SummaryValuations.Where(x => x.Values.Where(y => y.Value.ContainsKey(filter))).Select(d => new GroupedData(d))); 

底層結構

public class GroupedData 
{ 
    private SummaryValuation valuation; 

    public GroupedData(SummaryValuation valuation) 
    { 
     this.valuation = valuation; 
    } 
} 

public class SummaryValuationGroup 
{ 
    public string Grouping { get; set; } 

    public SummaryValuation[] SummaryValuations { get; set; } 
} 


public class SummaryValuation : ISummaryValuation 
{ 
    public SummaryValuation(DateTime valuationDate, SummaryGroup[] groups, Dictionary<string,Dictionary<string,double>> stuff) 
    { 
     .... 
    } 
} 

回答

0

你可以試試這個:

return new GroupedDataCollection(
    data.SummaryValuations.Values.SelectMany(subKeyPair => subKeyPair) 
     .Where(keyPair => keyPair.Key == filter) 
      .Select(keyPair => new GroupedData(keyPair.Value)); 

你應該扁平化的子字典,然後使用地方就可以了。 (我想我終於明白)

0

您的代碼:

return new GroupedDataCollection(data.SummaryValuations.Where(x => x.Values.Where(y => y.Value.ContainsKey(filter))).Select(d => new GroupedData(d))); 

爲了讓所有的鍵/值對,其中值包含過濾器:

return new GroupedDataCollection(data.SummaryValuations.Where(x => x.Values.Any(y => y.Value.ContainsKey(filter))).Select(d => new GroupedData(d))); 

如果這不是你正在找;請添加類型信息,並明確說明您嘗試實現的目標。

+0

現在提供,讓我知道你是否需要更多。謝謝 –