プロジェクトのダイナミックいくつかのプロパティを除いた結果

dapper linq

質問

次のような動的な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 }

受け入れられた回答

FastExpandoObjectがこれらのメソッドを実装しなかった理由はありませんでした。それ以外の必要はありませんでした。私は今、すべてのmissing / NotImplementedExceptionメソッドを埋めました。まだNuGetにデプロイしていないが、github / google-codeのコードが更新されている。


人気のある回答

あなたはどのような反復場合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;
                    });


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow