DapperのDynamicParameterコンストラクタを使用して渡されたパラメータを制限する方法

asp.net c# dapper

質問

Dapper DynamicParametersコンストラクタを使用すると、特定のパラメータを除外する方法があります。たとえば、次のエンティティがあるとします。

public class EntityA
{
    public string Method1 { get; set; }
    public string Method2 { get; set; }
    public string Method3 { get; set; }
}

Method1とMethod2のみをパラメータとして持つストアドプロシージャを呼び出すときに、DynamicParametersメソッドでこれらの2つのパラメータを渡して3つ目のパラメータをスキップできますか?実際の例では、エンティティのプロパティをさらに増やし、手動でパラメータを指定するよりも除外シナリオを使用します。

受け入れられた回答

ここで最も簡単なオプションは匿名投影です。これは、引数オブジェクト自体、またはカスタムパラメータを追加する必要がある場合はDynamicParametersのパラメータのいずれかで行うことができます。例えば:

conn.Execute(sql, new { obj.Foo, obj.Bar });

または:

var args = new DynamicParameters(new { obj.Foo, obj.Bar });
// not shown: add some more custom parameters
conn.Execute(sql, args);

人気のある回答

動的パラメータを生成するには、次のような拡張メソッドを使用できます。鉱山のようなケースでは、パラメータの数が多いので、少し時間を節約できます。

public static class ParameterExtensions
{
    public static DynamicParameters ConvertToDynamicParameters<T>(this T incoming)
    {
      DynamicParameters dynamicParameters = new DynamicParameters();
      foreach (PropertyInfo property in incoming.GetType().GetProperties())
      {
        object value = GetPropValue(incoming, property.Name);
        if (value != null) dynamicParameters.Add(property.Name, value);
      }
      return dynamicParameters;
    }

    private static object GetPropValue(object src, string propName)
    {
      return src.GetType().GetProperty(propName)?.GetValue(src, null);
    }
}


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