asp.net MVC 剃须刀应用程序 - 从范围内的数据库中选择数据
本文关键字:数据库 选择 数据 范围内 MVC net 剃须刀 应用程序 asp | 更新日期: 2023-09-27 18:33:30
我有一个快速的SQL问题。在我的 MVC Razor 应用程序中,我有两个文本输入,要求开始值和结束值。
这些值将是数字,它们对应于版本例如:4.0.100 - 4.0.157
所以我需要显示 100 - 157 之间的所有版本我可以直接访问数据库,它是版本列
我的问题是:如何编写或获取查询来显示此内容?
型:
using System;
using System.Collections.Generic;
namespace BenchmarkApp.Models
{
public partial class Build
{
public Build()
{
this.Executions = new List<Execution>();
}
public string Version { get; set; }
public bool Obfuscated { get; set; }
public bool Release { get; set; }
public int ID { get; set; }
public bool IsX64 { get; set; }
public bool Visible { get; set; }
public Nullable<System.DateTime> CreationDate { get; set; }
public virtual ICollection<Execution> Executions { get; set; }
}
}
显示两个输入的视图 .cshtml:
<td>
Viewing Option: @Html.DropDownList("ViewOption", (IEnumerable<SelectListItem>)ViewBag.ViewSelect, new { @onchange = "submit()" })
</td>
<td>
@if (ViewBag.RangeVisible == true)
{
@Html.Label("Range: ");
@Html.TextBox("start", "Start", new { maxlength = 10, size = 10 });
@Html.TextBox("end", "End", new { maxlength = 10, size = 10, @onchange = "submit()" });
}
我访问文本输入的控制器类:
string start = form["start"];
string end = form["end"];
string custom = form["customRange"];
string viewSelect = form["ViewOption"];
if (viewSelect.Equals("range"))
{
ViewBag.RangeVisible = true;
}
提前谢谢你!
我建议您使用 Version.TryParse
-方法 将版本字符串转换为Version
对象。首先,您可以编写一个扩展方法来执行将字符串/int 值解析为可比较的Version
对象:
public static Version ParseToVersion(this string input)
{
Version result = null;
Version.TryParse(input, out result);
return result;
}
然后,您可以轻松使用 linq 并使用上面的扩展方法选择所需的范围:
public IEnumerable<Build> GetBuildsInRange(string beginVersion, string lastVersion)
{
var startVersion = start.ParseToVersion();
var endVersion = end.ParseToVersion();
if (startVersion == null || endVersion == null) return IEnumerable.Empty<Build>();
return YourDbContext.Builds.Where(b =>
b.Version.ParseToVersion() >= startVersion
&& b.Version.ParseToVersion() <= endVersion);
}
注意:您可以验证 b.Version.ParseToVersion()
、 startVersion
和 endVersion
不为空!
由于您使用的是 Razor,我想您的控制器中有一个返回 ActionResult (最终视图)的方法。只需向此视图提供 GetBuildsInRange 方法返回的信息即可。