Как сохранить результат запроса в переменную для того, что использовать дальше?
Не подскажите, как вот этот запрос к базе:
using (var entities = new Entities(PosConnectionString))
{
var InfoCash = entities.GM_FinActStock
.Where(terminal => terminal.TerminalID == TerminalId && terminal.BudgetArticle == 5637151398)
.Select(cashnumber =>
new {
cashnumber = cashnumber.Amount
})
.FirstOrDefault();
}
Сохранить в переменную, чтобы потом использовать её дальше в коде?
Ответы (1 шт):
Переменная имеет область видимости. Грубо говоря, она ограничена фигурными скобками, в которых находится эта переменная. То есть, InfoCash видна только внутри блока using.
Чтобы она была доступна после этого блока, нужно объявить её вне этого блока (перед ним):
? InfoCash;
using (var entities = new Entities(PosConnectionString))
{
InfoCash = ...
}
// здесь InfoCash доступна
Знаком вопроса обозначен тип переменной. Какой тип задать? Тот, который возвращает ваш запрос. А именно, тип возвращаемый последним методом FirstOrDefault.
В вашем случае возвращается анонимный тип, который создан так: new { ... }. Создать переменную анонимного типа можно только с помощью ключевого слова var прямо по месту. В другом месте её объявить нельзя. Поэтому нужно избавиться от анонимного типа.
Создадим класс, который будет содержать нужную нам информацию:
class InfoCash
{
public decimal Amount { get; set; }
}
Используем его в запросе:
InfoCash infoCash;
using (var entities = new Entities(PosConnectionString))
{
infoCash = entities.GM_FinActStock
.Where(terminal => terminal.TerminalID == TerminalId && terminal.BudgetArticle == 5637151398)
.Select(cashnumber =>
new InfoCash
{
Amount = cashnumber.Amount
})
.FirstOrDefault();
}
// здесь можно использовать infoCash
Однако, дополнительный класс нужен лишь в том случае, если возвращается несколько полей (колонок). А у вас всего одно поле. Поэтому достаточно переменной простого типа.
decimal amount;
using (var entities = new Entities(PosConnectionString))
{
amount = entities.GM_FinActStock
.Where(terminal => terminal.TerminalID == TerminalId && terminal.BudgetArticle == 5637151398)
.Select(cashnumber => cashnumber.Amount)
.FirstOrDefault();
}
Судя по названию Amount - это некая сумма, наверняка деньги. Если это действительно так, то тип должен быть decimal. Если у вас double/float - исправьте.
Запрос можно сократить до следующего:
amount = entities.GM_FinActStock
.FirstOrDefault(terminal => terminal.TerminalID == TerminalId && terminal.BudgetArticle == 5637151398)
.Amount;