如何解决C#从Lambda表达式中的反射中使用PropertyInfo,错误:不是有效的属性表达式
我有一个循环,我只想循环使用具有特定装饰器/属性的对象的属性,对于这些属性,如果它们为null,则将其从实体框架中移出处于修改状态。我可以使循环正常工作,但是无法删除正在跟踪的循环。
这是我的尝试
// Protect [NullUpdateIgnoreAttribute] attributes from nullification
var properties = updateCustomer.GetType().GetProperties().Where(
prop => Attribute.IsDefined(prop,typeof(NullUpdateIgnoreAttribute)));
foreach (var p in properties)
{
Console.WriteLine($"Verifying {p.Name}...");
object value = p.GetValue(updateCustomer,null);
if (value == null)
{
Console.WriteLine($"{p.Name} is null. Shielding attribute.");
loyalty.Entry(customer).Property(x => p.Name).IsModified = false;
}
}
由于我要传递给loyalty.Entry().Property(x => here).IsModified = false
的原因而失败。显然,我不能直接使用propertyInfo
。如果我正常进行此操作,则只需通过x => x.propertyname
。 (例如x.firstname
),但我无法在此处对属性名称进行硬编码,它可以是具有此属性的多个属性中的任何一个。
引发的错误是:
"message": "The expression 'x => value(LCSApi.Customer+<>c__DisplayClass22_2).p.Name' is not a valid property expression. The expression should represent a simple property access: 't => t.MyProperty'. (Parameter 'propertyAccessExpression')",
解决方法
有一个overload接受属性名称为string
,因此您可以使用它:
loyalty.Entry(customer).Property(p.Name).IsModified = false;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。