0

我有一个快速的 SQL 问题。在我的 MVC Razor 应用程序中,我有两个文本输入要求输入开始值和结束值。

这些值将是数字,它们对应于版本 Ex: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;

        }

先感谢您!

4

1 回答 1

0

我建议您使用Version.TryParse-Method将您的版本字符串转换为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 方法返回的信息即可。

于 2013-09-30T15:04:21.487 回答