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;
        }

提前谢谢你!

asp.net MVC 剃须刀应用程序 - 从范围内的数据库中选择数据

我建议您使用 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()startVersionendVersion 不为空!

由于您使用的是 Razor,我想您的控制器中有一个返回 ActionResult (最终视图)的方法。只需向此视图提供 GetBuildsInRange 方法返回的信息即可。