1
[HttpPost]
public ActionResult Edit(orders neworders) 
{
    string modifields;
    orders oldorders = HDB.orders.Where(c => c.id_order == cmd.id_order).First();
    foreach (var field in oldorders)
    {
          if(field!= neworders.samefield)  
          {
              modifields+=nameoffield ;
         }            
    }
}

Q如何比较新旧记录中的字段并在值更改时保存字段名称?

4

4 回答 4

1

Equals() 方法覆盖以比较同一类的实例的示例

  public override bool Equals(object anObject)
  {
     if (anObject is Order)
     {
        Order newOrder = (Order)anObject;
        if (newOrder.Name.Equals(this.Name)) //add additional comparisons as needed.  You could also use a foreach loop here as Tony shows below
        {
           return true;
        }
        foreach (var field in typeof(Order).GetFields())
        {
            if (field.GetValue(this) != field.GetValue(newOrder)) { return false; }
        }
        foreach (var property in typeof(Order).GetProperties())
        {
            if (property.GetValue(this, null) != property.GetValue(newOrder, null)) { return false; }
        }

     }
     return false;

  }

以下是如何调用您的操作:

[HttpPost] public ActionResult Edit(orders neworder)  
{     
    orders oldorder = HDB.orders.Where(c => c.id_order == cmd.id_order).First();     
    if(oldorder.Equals(newOrder)
    {
       //do wome work
    }
}
于 2012-08-01T13:51:27.890 回答
1

First()返回单个对象,因此无法迭代。

在两行之间阅读,您似乎想要遍历对象上的所有字段。在这种情况下,您可以使用反射返回一个字段列表,然后您可以对其进行迭代。

foreach (var field in oldorders.GetType().GetFields())
{
    var value = field.GetValue(oldorders);
}

编辑:从您的其他评论看来,您希望将该对象与另一个对象进行比较,在这种情况下,您最好实现该 IEquatable<T>接口。例如

class Order : IEquatable<Order>
{
    // TODO: add properties of an Order
    public string foo { get; set; }
    public string bar { get; set; }

    public bool Equals(Order other)
    {
        foreach (var field in typeof(Order).GetFields())
        {
            if (field.GetValue(this) != field.GetValue(other))
            {
                return false;
            }
        }

        foreach (var property in typeof(Order).GetProperties())
        {
            if (property.GetValue(this, null) != property.GetValue(other, null))
            {
                return false;
            }
        }

        return true;
    }
}
于 2012-08-01T13:52:55.567 回答
0

我会说你的orders类没有IEnumerable正确实现接口。为了以foreach这种方式使用,您必须实现接口并至少考虑支持它所需的所有方法。

http://msdn.microsoft.com/en-us/library/9eekhta0.aspx

于 2012-08-01T13:38:12.127 回答
0

您的 oldrders 变量不是可枚举的。First() 方法返回一个单一对象。删除 .First() ,您将拥有一个 foreach 循环可以使用的 Enumerable 对象

于 2012-08-01T13:38:28.313 回答