Как создать конструктор класса, который возвращает коллекцию экземпляров этого класса? - PullRequest
0 голосов
/ 21 апреля 2010

Моя программа имеет следующее определение класса:

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 так часто, что это может привести к нагрузке на базу данных.

ТИА.

1 Ответ

6 голосов
/ 21 апреля 2010

Напишите статический фабричный метод, который вызывает приватный конструктор.

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();
        }            

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...