如何创建一个返回该类实例集合的类的构造函数?

时间:2010-04-21 09:31:45

标签: c# linq-to-sql collections constructor

我的程序有以下类定义:

public sealed class Subscriber
{
    private subscription;
    public Subscriber(int id)
    {
        using (DataContext dc = new DataContext())
        {
           this.subscription = dc._GetSubscription(id).SingleOrDefault();                
        }            
    }
}

,其中

_GetSubscription()是一个 sproc ,它返回ISingleResult<_GetSubscriptionResult>类型的值

说,我有一个类型List<int>的列表,其中包含1000 id个,我想创建一个类型为List<Subscriber>的订阅者的集合。

如果不在循环中调用构造函数1000次,我怎么能这样做呢?

因为我试图避免频繁地打开/关闭DataContext,这可能会给数据库带来压力。

TIA。

1 个答案:

答案 0 :(得分:6)

编写一个调用私有构造函数的静态工厂方法。

public sealed class Subscriber
{
    // other constructors ...

    // this constructor is not visible from outside.
    private Subscriber(DataContext dc, int id)
    {
       // this line should probably be in another method for reusability.
       this.subscription = dc._GetSubscription(id).SingleOrDefault();                
    }

    public List<Subscriber> CreateSubscribers(IEnumerable<int> ids)
    {
        using (DataContext dc = new DataContext())
        {

           return ids
             .Select(x => new Subscriber(dc, x))
             // create a list to force execution of above constructor
             // while in the using block.
             .ToList();
        }            

    }

}