剃刀和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)。谢谢。

剃刀和ASP.. NET:测试一条记录是否存在并使用其字段的正确方法

您可以使用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有多个匹配的行,你最多查询几个(多于一个,因为你似乎想要验证是否有零或一行)。