gpt4 book ai didi

c# - 如何在泛型方法中反射(reflect) lambda 的属性?

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:34 25 4
gpt4 key购买 nike

我需要为我的存储库反射(reflect)一个 lambda 属性,代码如下:

public abstract class RestController<T> : 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<T>()
.Where(i=>i.GetType().GetProperty(_identityProp)==val)
.ToList();
items.ForEach(x=>_db.Delete(x));
_db.CommitChanges();
return Json("success");
}
}

但是 lambda 的结果是一个空列表...请帮忙,我做错了什么?

最佳答案

您的 LINQ 查询中缺少 .GetValue(i, null)。目前,您正在将属性值 (value) 与描述该属性的 PropertyInfo 进行比较。

正确的代码:

var items = _db.All<T>()
.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<T>()
.Where(i => propertyInfo.GetValue(i, null) == val)
.ToList();

关于c# - 如何在泛型方法中反射(reflect) lambda 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com