C#对GroupBy等聚合函数之前的字段进行动态测试

C#对GroupBy等聚合函数之前的字段进行动态测试,c#,dynamic,C#,Dynamic,假设以下代码: var citizens = await _stateProvider.SelectWhere(whereParams); var retDto = new PercentGroupBy() { Total = citizens.Count, Elements = citizens.GroupBy(p => p.Content.Current.AggState.ToString(

假设以下代码:

        var citizens = await _stateProvider.SelectWhere(whereParams);
        var retDto = new PercentGroupBy()
        {
            Total = citizens.Count,
            Elements = citizens.GroupBy(p => p.Content.Current.AggState.ToString()).ToDictionary(g => g.Key, g => g.Count())
        };
        return retDto;
公民是以下类别的列表:

public class Citizen    {
    public string ETag { get; set; }
    public string Name{ get; set; }
    public dynamic Content { get; set; }
}
测试“p.Content.Current.AggState”属性存在的最佳选项是什么


选择where可能会返回一些citizens,其中Content.Current为null,因此询问AggState会引发错误。

Oops我在发布问题时找到了答案,因此这里是为了分享知识:

在“GroupBy”之前添加流体“Where”

    var citizens = await _stateProvider.SelectWhere(whereParams);
    var retDto = new PercentGroupBy()
    {
        Total = citizens.Count,
        Elements = citizens
        .Where(p => p.Content.Current != null)
        .GroupBy(p => p.Content.Current.AggState.ToString())
        .ToDictionary(g => g.Key, g => g.Count())
    };
    return retDto;