【问题标题】:asp.net mvc razor application - Select data from database within rangeasp.net mvc razor 应用程序 - 从范围内的数据库中选择数据
【发布时间】:2013-10-06 12:05:07
【问题描述】:

我有一个快速的 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;

        }

提前谢谢你!

【问题讨论】:

  • 好吧,您可以执行 linq to sql、存储过程,或者只是在页面上写出 sql。如果您不太了解 sql,Linq 可能是最简单的。
  • 您使用的是哪个数据库?
  • 我正在使用构建数据库。

标签: c# asp.net sql asp.net-mvc razor


【解决方案1】:

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

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

【讨论】:

  • 感谢您的快速回复!对于迟到的回复,我深表歉意。我对 ASP.net 开发相当陌生,你能更详细地解释一下我必须做什么吗?也许同时解释!非常感谢!
  • @StephenSugumar 现在看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
相关资源
最近更新 更多