项目动态Dapper结果排除了一些属性

时间:2012-10-16 13:45:08

标签: linq dapper

给定动态Dapper查询,例如:

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

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

我尝试遍历结果并将每个结果转换为IDictionary<string, object>,以便我可以简单地删除保存数据的键/值对。不幸的是,无论出于何种原因,底层的FastExpando对象都没有实现Remove方法。 The source code for 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 }

2 个答案:

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

答案 1 :(得分:3)

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