我想出了这个,不是最优雅的解决方案,不确定我是否会在生产中采用它。它从使用 Func<> 传入的查询中读取 SQL 服务器表,并且作为参数传入的 Action 对象用于将对象添加到集合中。
public C Read<C, T>(Func<SqlConnection, SqlDataReader> func, Action<C, T> a)
where C : ICollection, new()
where T : EntityBase, new()
{
C objects = new C();
using (SqlConnection connection = GetConnection())
{
using (SqlDataReader reader = func(connection))
{
while (reader.Read())
{
T obj = new T();
obj.PopulateFromReader(reader);
a(objects, obj);
}
}
}
return objects;
}
像这样调用:
Dictionary<Guid, DeliveryMoment> dic = _dalBO.Read<Dictionary<Guid, DeliveryMoment>, DeliveryMoment>(connection => { return CmdFactory.ReadDeliveryMoments(connection); }, (d, o) => { d.Add(o.DeliveryMomentId, o); });
你怎么看?太阴暗或可以接受?