Linq to sql Эффективное решение - PullRequest
0 голосов
/ 13 февраля 2012

Недавно начал с linq to sql, и я не уверен, какой самый эффективный способ запросить БД и получить только то, что мне нужно.

  DataContext db = new
 DataContext(ConfigurationManager.AppSettings["myConnection"]);

 Table<RatesClass> CurrencyRatestbl = db.GetTable<RatesClass>();
 double Rate = 0.00;
  Rate =
      (from c in CurrencyRatestbl
      where c.From == "something"
      select Convert.ToDouble(c.Rate)).Single();

Я думаю, что db.GetTable получает все записи из таблицы, но я хочу получить только одну запись из базы данных, есть ли способ сделать это.

Примечание: запрос linq всегда будет получать одну запись, «что-то» - это название продукта, поэтому для каждого названия продукта будет установлена ​​единая ставка.

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

Вы также можете сделать это следующим образом:

using(DataContext db = new DataContext(ConfigurationManager.AppSettings["myConnection"]))
{
    var rate=db.GetTable<RatesClass>()
             .Where(a=>a.From == "something")
             .Select(a=>Convert.ToDouble(a.Rate))
             .SingleOrDefault();
}

Я также считаю, что лучше всего иметь контекст базы данных внутри оператора using.Так что подключение к базе данных открыто столько, сколько нужно.Таблица get не получает все записи до ее фактического выполнения.

Таблицы в реляционной базе данных представлены в виде коллекций таблиц (в которых реализованы такие интерфейсы, как IQueryable и IEnumerable).В DataContext есть метод GetTable <> ();это представляет потенциальное взаимодействие с таблицей зрения. Запрос фактически не выполняется, пока не будет выполнена итерация по результату.Параметр type метода GetTable () определяет таблицу в базе данных .

Ссылка здесь

0 голосов
/ 13 февраля 2012

Single() вызовет исключение, если ваш ResultSet содержит 0 или более чем один элемент ... First() или FirstOrDefault() кажется более подходящим в вашем случае.

DataContext db = new DataContext(ConfigurationManager.AppSettings["myConnection"]);
Table<RatesClass> CurrencyRatestbl = db.GetTable<RatesClass>();

double Rate = 0.00;

Rate = (from c in CurrencyRatestbl
        where c.From == "something"
        select Convert.ToDouble(c.Rate)).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...