0

簡単な SQL の質問があります。私の MVC Razor アプリケーションでは、開始値と終了値を求める 2 つのテキスト入力があります。

これらの値は数値で、バージョン 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; }
}

}

2 つの入力を示すビュー .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オブジェクトに変換することをお勧めします。まず、string/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);
}

注:とが null ではないb.Version.ParseToVersion()ことを確認できます。startVersionendVersion

Razor を使用しているため、Controller に ActionResult (最終ビュー) を返すメソッドがあると思います。GetBuildsInRange メソッドによって返された情報をこのビューに入力するだけです。

于 2013-09-30T15:04:21.487 に答える