1

以下内容目前正在运行,但我需要应用我未能实现的 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)
    {
        ....
    }
}
4

2 回答 2

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

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

于 2013-09-26T14:09:31.247 回答
0

你可以试试这个:

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

您应该展平子词典,然后使用 where 就可以了。(我想我终于明白了)

于 2013-09-26T13:52:45.930 回答