小巧玲珑的对象加上背景
问题描述:
代码:小巧玲珑的对象加上背景
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})
答
您可以将对象转换为一个字典,然后添加额外的道具吧。
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));
}
}