给定动态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 }
答案 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上的代码已经更新。