ラムダのプロパティをジェネリックメソッドに反映させる方法

私は私のリポジトリのラムダのプロパティを反映する必要があります、ここにコードです:

public abstract class RestController : Controller where T : class
{
    private readonly IRepository _db;
    private readonly string _identityProp;

    protected RestController(IRepository db, string identityProp)
    {
        _db=db;
        _identityProp = identityProp;
    }

    protected virtual void Delete(T item)
    {
        var value = item.GetType().GetProperty(_identityProp).GetValue(item, null);
        var items = _db.All()
            .Where(i=>i.GetType().GetProperty(_identityProp)==val)
            .ToList();
        items.ForEach(x=>_db.Delete(x));
        _db.CommitChanges();
        return Json("success");
    }
}

ラムダの結果は空リストです...助けてください、私が間違っているの?

2
問題があった? IDプロパティは文字列で、その動作は...
追加された 著者 CodeAddicted,

1 答え

LINQクエリに .GetValue(i、null)がありません。現在、プロパティの値( value )とプロパティを記述する PropertyInfo を比較しています。

正しいコード:

var items = _db.All()
               .Where(i => i.GetType().GetProperty(_identityProp)
                                      .GetValue(i, null) == val)
               .ToList();

または、パフォーマンスを少し上回る:

var propertyInfo = item.GetType().GetProperty(_identityProp);
var value = propertyInfo.GetValue(item, null);
var items = _db.All()
               .Where(i => propertyInfo.GetValue(i, null) == val)
               .ToList();
2
追加された
@ user981804:私の答えを受け入れることを忘れないでください:答え?
追加された 著者 Daniel Hilgarth,
ありがとうございました!それは私に多くの助けになる!
追加された 著者 CodeAddicted,