У меня есть следующий код в файле 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). Благодарю.
С уважением и благодарностью.
Вы можете использовать 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>
}
Нет, не совсем. Вы возвращаете всю запись, и в этом нет необходимости. Вы можете изменить свой запрос следующим образом:
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
}
Длинный комментарий:
Queryable.Single вместе с запросом LINQ to SQL - это возможный подход - он будет генерировать правильный запрос SQL для вас и избегать потенциального запроса более чем одного элемента.
Если вы знаете, что вам нужно не более одного элемента - ограничьте максимальное количество элементов (т.е. До 2), поэтому даже если у DB есть несколько совпадающих строк, вы запрашиваете не более нескольких (более одного, поскольку вы, похоже, хотите проверить, есть ли нуль или один ряд).