2017-10-10 58 views
2

代码:小巧玲珑的对象加上背景

class ComplicatedObject { 
      public int? TaskTypeId { get; set; } 
      public int?[] CountTypeIds { get; set; } 
      public int?[] EquipmentTypeIds { get; set; } 
      public int? TaskBlockId { get; set; } 
      public int? TeamId { get; set; } 
      public string DriverId { get; set; } 
      public int? TaskStatusId { get; set; } 
      public string EventType { get; set; } 
      public DateTime? StartDate { get; set; } 
      public DateTime? EndDate { get; set; } 
      public string County { get; set; } 
      public string Tag { get; set; } 
    } 

目前我做的:

  var param = new 
      { 
       Id = id, 
       TaskTypeId = complicatedObjectInstance.TaskTypeId, 
       CountTypeIds = complicatedObjectInstance.CountTypeIds, 
       EquipmentTypeIds = complicatedObjectInstance.EquipmentTypeIds, 
       TaskBlockId = complicatedObjectInstance.TaskBlockId, 
       TeamId = complicatedObjectInstance.TeamId, 
       DriverId = complicatedObjectInstance.DriverId, 
       TaskStatusId = complicatedObjectInstance.TaskStatusId, 
       EventType = complicatedObjectInstance.EventType, 
       StartDate = complicatedObjectInstance.StartDate, 
       EndDate = complicatedObjectInstance.EndDate, 
       County = complicatedObjectInstance.County, 
       Tags = complicatedObjectInstance.Tag 
      }; 
    ExecuteQuery(sql, params) 

凡那短小精悍越来越对象基本上是在ID加ComplicatedObject。

我要像做

ExecuteQuery(sql, new { Id = id, complicatedObjectInstance}) 

回答

0

您可以将对象转换为一个字典,然后添加额外的道具吧。

public static class ObjectExtensions 
{ 
    public static IDictionary<string, object> ToDictionary(this object value) 
    { 
     return TypeDescriptor.GetProperties(value.GetType()).Cast<PropertyDescriptor>().ToDictionary(property => property.Name, property => property.GetValue(value)); 
    } 
} 

[Test] 
public void TestDictionary() 
{ 
    var param = new TestClass { Bar = "Bar", Foo = "Foo" }.ToDictionary(); 
    param.Add("Id", 99); 

    using (
     var conn = new SqlConnection(@"Data Source=.\sqlexpress;Integrated Security=true; Initial Catalog=foo")) 
    { 
     var result = conn.Query("select Foo = @Foo, Id = @Id", param).First(); 
     Assert.That(result.Id, Is.EqualTo(99)); 
    } 
}