1

给定一个动态的 Dapper 查询,例如:

var results = connection.Query<dynamic>("SELECT ....");

我想从结果中删除几个返回的列/属性。诀窍是我想在不知道/关心我要保留的属性的名称的情况下执行此操作,否则我只会将结果投影到一个新的匿名类型中。

我试图遍历结果并将每个结果转换为一个IDictionary<string, object>,以便我可以简单地删除保存数据的键/值对。不幸的是,无论出于何种原因,底层的内部 FastExpando 对象都没有实现 Remove 方法。FastExpando 的源代码显示:

bool IDictionary<string, object>.Remove(string key)
{
    throw new NotImplementedException();
}

我该如何实施?要清楚,我基本上想要:

var filteredResults = from r in results
                      select new { // All properties except a couple of well-known ones }
4

2 回答 2

3

如果你迭代FastExpandoObject并返回一个过滤器ExpandoObject怎么办?

 var filteredResults = dynamicResult.Select<dynamic, dynamic>(x =>
                    {
                        var filteredRow = new ExpandoObject() as IDictionary<string, Object>;
                        var props = x as IDictionary<string, object>;
                        foreach (var prop in props)
                        {
                            if (!filter.Contains(prop.Key))
                                filteredRow.Add(prop);
                        }
                        return filteredRow;
                    });
于 2012-10-17T06:54:23.547 回答
3

没有理由FastExpandoObject不实现这些方法,除了:它不需要。我现在已经填写了所有缺少的 /NotImplementedException方法。我还没有部署到 NuGet,但是 github/google-code 上的代码已经更新了。

于 2012-10-18T06:13:59.627 回答