剃刀和ASP.. NET:测试一条记录是否存在并使用其字段的正确方法
本文关键字:字段 方法 存在 NET ASP 测试 是否 记录 一条 剃刀 | 更新日期: 2023-09-27 18:04:11
我在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的正确方法是什么?
我理解控制器等。我希望有一个快速解决一个非常简单的情况。这是一个简单的页面,仅用于说明。我还没有准备好构建一个三层web应用程序。它是ASP。. NET网页(而不是asp.net。净MVC)。谢谢。
您可以使用QuerySingle
。如果没有找到,它会返回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>
}
No。不是真的。您返回的是整个记录,没有必要这样做。您可以将查询修改如下:
var sql = "select count(*) from my_record where id= " + id;
这将返回匹配where
子句的记录计数。您只需检查结果是否为!= 1
,以确定它是否不存在。
说了这么多,除非你正在使用ASP。. NET网页(和而不是)。. NET MVC),你应该把这些数据代码移动到你的控制器。
编辑
什么是正确的方法来测试记录是否存在,而不是使用foreach?
这取决于db.Query(query)
的结果。一个简单的实现是
var results = db.Query(query);
if(results.Count() == 0)
{
// does not exist
}
长注释:
可查询。单一与LINQ到SQL查询是可能的方法-它将为您生成适当的SQL请求,并避免潜在地查询多个项目。
如果你知道你最多需要一个项目-限制元素的最大数量(即2),所以即使DB有多个匹配的行,你最多查询几个(多于一个,因为你似乎想要验证是否有零或一行)。