0

私は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や...

プロパティがnullではないことを確認したいのですが、選択したオブジェクトの同様のプロパティに割り当てられます(矢印で示されている行)。これを自動的に行うにはどうすればよいですか? 私はこのようなwtiteを望んでいません:

if(item.Status != null)
{
     u.Status = item.Status;
}
if(item.Name != null)
{
     u.Name = item.Name;
}
,....

ありがとう

4

2 に答える 2

3
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));
    }
}
于 2012-10-14T11:53:02.457 に答える
1

use reflectionnullをチェックできます。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
   }
}
于 2012-10-14T11:54:40.757 に答える