我有Update
这样的方法:
public void Update(MyClass item, System.Linq.Expressions.Expression<Func<MyClass, bool>> exp)
我更新状态字段如下:
MyClass u = ent.MyClass.Where(exp).FirstOrDefault();
if (u == null)
{
throw new Exception("No Record Found");
}
else
{
u.Status=item.Status; <-------
ent.SaveChanges();
}
好的,问题是我想将此更新方法用于各种更新,例如用户可能想要更新status,Name
或Tel,fax,Address,name
和...
我想检查I属性是否为null,它分配给所选对象的类似属性(用箭头显示的行)。我怎么能自动这个?我不想这样的wtite:
if(item.Status != null)
{
u.Status = item.Status;
}
if(item.Name != null)
{
u.Name = item.Name;
}
,....
感谢
答案 0 :(得分:2)
MyClass item = new MyClass() { Name = "aaa" };
MyClass u = new MyClass() { Name = "uuu", Status = "ssss" };
MyCopy(item, u);
void MyCopy<T>(T src, T dest)
{
var notNullProps = typeof(T).GetProperties()
.Where(x=>x.GetValue(src,null)!=null);
foreach (var p in notNullProps)
{
p.SetValue(dest, p.GetValue(src, null));
}
}
答案 1 :(得分:1)
您可以use reflection
检查是否为空。唯一的开销是将propertyName
显式传递给您的方法 -
public void Update(MyClass item, Expression<Func<MyClass, bool>> exp,
string propertyName)
{
object propertyValue = item.GetType().GetProperty(propertyName)
.GetValue(item, null);
if(propertyValue != null)
{
// do your stuff here
}
}