如何将where子句应用于特定集合

时间:2013-09-26 13:49:38

标签: c#

以下目前正在运行,但我需要应用一个我无法实现的WHERE子句。当前代码如下所示。我的尝试显示在当前代码行的正下方。编译器抱怨“无法转换表达式IEnumerablestring,double>返回类型'bool'”。有什么建议!? 非常感谢,

工作代码

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)
    {
        ....
    }
}

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

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

您应该展平子词典,然后使用其中的位置。 (我想我终于明白了)

答案 1 :(得分: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)));

如果这不是你想要的;请添加类型信息并明确说明您要实现的目标。