Razor и ASP.NET: правильный способ проверить, существует ли запись и использовать ее поля?

1

У меня есть следующий код в файле cshtml для извлечения записи (должна быть только запись) и отображения ее записи:

@{
    //id is already obtained at this point
    var db = Database.Open("myConnection");
    var query = "select * from my_record where id= " + id;
}

@foreach (var row in db.Query(query))
{
    <span>@row.title</span>

}

Как вы можете видеть, я использую цикл foreach как тест, чтобы увидеть, есть ли какая-либо запись. В моем случае есть ТОЛЬКО одна запись. Каков правильный способ проверить, существует ли запись вместо использования foreach?

ОБНОВИТЬ

Я понимаю контроллер и т.д. Я надеюсь получить быстрое решение для ОЧЕНЬ простой ситуации. Это простая страница только для иллюстрации. Я не готов строить трехуровневое веб-приложение. Это веб-страницы ASP.NET (а не ASP.NET MVC). Благодарю.

С уважением и благодарностью.

Теги:
razor

3 ответа

3
Лучший ответ

Вы можете использовать QuerySingle. Afaik возвращает null если ничего не найдено, поэтому:

@{
    //id is already obtained at this point
    var db = Database.Open("myConnection");
    var query = "select * from my_record where id= " + id;
    var record = db.QuerySingle(query);
}

@if (record != null)
{
    <span>@record.title</span>

}
  • 0
    Андрей. Что такое RecordTypeHere? Это просто ряд, не соответствующий ни одному классу.
  • 0
    @ curious1, это только меня смущает. Уже убрал его, извините
Показать ещё 3 комментария
1

Нет, не совсем. Вы возвращаете всю запись, и в этом нет необходимости. Вы можете изменить свой запрос следующим образом:

var sql = "select count(*) from my_record where id= " + id;

Это вернет количество записей, соответствующих условиям where. Вы просто проверяете, равен ли результат != 1 чтобы определить, не существует ли он.

Все сказанное, если вы не используете веб-страницы ASP.NET (а не ASP.NET MVC), вы должны перенести этот код данных на свой контроллер.

редактировать

Каков правильный способ проверить, существует ли запись вместо использования foreach?

Это зависит от результата db.Query(query). простая реализация будет

var results = db.Query(query);
if(results.Count() == 0)
{
// does not exist
}
  • 0
    Нейт, твой sql получает только количество записей. Мне все еще нужно получить доступ к полям записи, если она существует. Это веб-страницы ASP.NET (а не ASP.NET MVC).
  • 2
    Вы спросили, был ли это лучший способ проверить, существует ли он, а не существует ли, и затем отобразить его. Если вам нужно проверить, существует ли он, и отобразить его, тогда ваш запрос должен быть в порядке (при условии, что вам нужны все поля)
Показать ещё 1 комментарий
1

Длинный комментарий:

Queryable.Single вместе с запросом LINQ to SQL - это возможный подход - он будет генерировать правильный запрос SQL для вас и избегать потенциального запроса более чем одного элемента.

Если вы знаете, что вам нужно не более одного элемента - ограничьте максимальное количество элементов (т.е. До 2), поэтому даже если у DB есть несколько совпадающих строк, вы запрашиваете не более нескольких (более одного, поскольку вы, похоже, хотите проверить, есть ли нуль или один ряд).

  • 0
    Алексей, большое спасибо за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню