DapperExtensionsでの述語

c# dapper

質問

DapperExtensionsで一般的なFindメソッドを作成しようとしています

これは私の方法です

 public IEnumerable<T> Find(Expression<Func<T, object>> expression)
    {
        using (IDbConnection cn = GetCn())
        {
            cn.Open();

            var predicate = Predicates.Field<T>(expression, Operator.Eq, true);
            return cn.GetList<T>(predicate);
        }
    }

しかし、私はこの行にSystem.NullReferenceExceptionを取得しますSystem.NullReferenceException var predicate = Predicates.Field<T>(expression, Operator.Eq, true);

これはDapperExtensionsのヘルプドキュメントのものですが、これをGenericメソッドに変換しようとしています。

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    var predicate = Predicates.Field<Person>(f => f.Active, Operator.Eq, true);
    IEnumerable<Person> list = cn.GetList<Person>(predicate);
    cn.Close();
}

受け入れられた回答

私はrepro'dていませんが、問題があるように、それはあなたが例よりも表現がより複雑になっていることを、部分的に見えます 。提案として、以下を試してください:

public IEnumerable<T> Find<TValue>(Expression<Func<T, TValue>> expression,
                                   TValue value)
{
    using (IDbConnection cn = GetCn())
    {
        cn.Open();

        var predicate = Predicates.Field<T>(expression, Operator.Eq, value);
        return cn.GetList<T>(predicate);
    }
}

そして:

var data = Find(p => p.MarketId, marketId);

あなたのコメントと例だけに基づいて、これは完全にテストされていません。

あなたのコードベースで実用的でない場合は、上記のものを試して、それが動作するかどうかを確認することをお勧めします。しかし、上記のことがわかるまでは、その例を挙げる価値はありません。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ