Я пытаюсь получить данные из источника данных SQL-сервера. Это, вероятно, действительно тривиально, но я не вижу, что мне не хватает.

Мой код пока что

    public List<string> GetCountries()
    {
        using (var context = new NorthwindDataContext())
        {
            return (from c in context.Customers
                select c.Country).Distinct().ToList();
        }
    }

Но визуальная студия жалуется на

«Невозможно преобразовать тип NorthwindDataContext в System.Idisposable»

В отношении к

new NorthwindDataContext()

Это также не может решить

select c.Country

Я использую .net 4.5

Кто-нибудь может что-нибудь подсказать?

0
Nav 30 Апр 2014 в 14:42

2 ответа

Лучший ответ

Предположительно это связано с тем, что NorthwindDataContext() не реализует интерфейс IDisposable, поэтому вы не можете использовать его в операторе using().

Попробуйте вместо этого:

public List<string> GetCountries()
{
    var context = new NorthwindDataContext();

    return (from c in context.Customers
           select c.Country).Distinct().ToList();
}
2
DGibbs 30 Апр 2014 в 10:43

Оператор using привязан к интерфейсу IDisposable, как описано в документы MSDN:

Предоставляет удобный синтаксис, обеспечивающий правильное использование объектов IDisposable.

Это означает, что после возврата списка ваших объектов приложение попытается удалить использованные объекты и пометить их для сборки мусора. Действия вашего using соответствуют следующему коду:

try
{
    string s = myObject.Stuff();
}
finally
{
    ((IDisposable)myObject).Dispose();
}

Скорее всего, ваш объект NorthwindDataContext() не реализует интерфейс IDisposable, и тогда у вас возникла ошибка приведения. Вы не можете использовать оператор using.

0
Alberto Solano 30 Апр 2014 в 11:02