私はこのサイトでいくつかの質問をしてきましたが、多くの小さなことへの答えがありますが、今はすべてをつなぎ合わせようとしています.
データベースにあるすべてのプロパティを表示するページがあります。ただし、これらの結果を絞り込む方法を見つける必要があります。たとえば、寝室が 4 つある物件のみを表示するなどです。問題は、検索用語に含まれる変数の数がまだわからないことです。これが例です。
- ユーザーは、寝室が 4 つしかないすべての物件を見たいと思うかもしれません。
- ユーザーは、4 つのベッドルームと 3 つのバスルームがあり、8 人が宿泊できるすべての物件を見たいと思うかもしれません。
クエリ文字列 ?numbedrooms=4&?numbathrooms=3 からすべての変数を取得することにしました。
これまでのコードは次のとおりですが、機能しません。
@{
var db = Database.Open("StayInFlorida");
IEnumerable<dynamic> queryResults;
int numBedrooms = Request.QueryString["numBedrooms"].AsInt();
int numBathrooms = Request.QueryString["numBathrooms"].AsInt();
int sleeps = 0;
List<int> argList = new List<int>();
if (Request.QueryString["sleeps"].IsInt())
{
sleeps = Request.QueryString["sleeps"].AsInt();
}
int numOfArguments = 0;
string selectQueryString = "SELECT * FROM PropertyInfo ";
if (numBedrooms != 0)
{
argList.Add(numBedrooms);
selectQueryString += "WHERE numBedrooms = @0 ";
numOfArguments++; //increment numOfArguments by 1
}
if (numBathrooms != 0)
{
argList.Add(numBathrooms);
if (numOfArguments == 0)
{
selectQueryString += "WHERE numBathrooms = @0 ";
}
else
{
selectQueryString += "AND numBathrooms = @" + numOfArguments + " ";
}
numOfArguments++;
}
if (sleeps != 0)
{
argList.Add(sleeps);
if (numOfArguments == 0)
{
selectQueryString += "WHERE sleeps = @0 ";
}
else
{
selectQueryString += "AND sleeps = @" + numOfArguments + " ";
}
numOfArguments++;
}
selectQueryString += "ORDER BY numBedrooms DESC"; //Adjust this order by clause how you see fit.
int[] argArray = argList.ToArray();
if (argArray.Length > 0)
{
queryResults = db.Query(selectQueryString, argArray); //stores a dynamic list to 'queryResults' which can later be easily iterated through with a 'foreach' list and written to the page with razor.
}
}
<!--Results Start-->
@foreach(var row in queryResults){
<div class="container">
<h4><a href="/property.cshtml?propertyid=@row.PropertyID">@row.PropertyName</a></h4>
<h5>Bedrooms: @row.NumBedrooms Bathrooms: @row.NumBathrooms Sleeps: @row.NumSleeps</h5>
</div>
}
<!--Results Finish-->
明確にするために、検索クエリごとにクエリ文字列エントリがあるかどうかを確認する方法を見つける必要があります。ある場合は、それを SQL ステートメントに追加して、一致するすべての結果を表示する必要があります。