1
public class Advertise {
public int AdvertiseId {get;set;}
public string Title {get;set;}
Description
}
public class Fields {
public int FieldId {get;set;}
public string Name {get;set;}
}
public class Values {
public int ValueId {get;set;}
public string ValueName {get;set;}
}
public class FieldsValues {
public int FieldValueId {get;set;}
public int AdvertiseId {get;set;}
public int FieldId {get;set;}
public int ValueId {get;set;}
}
ユーザーが検索をフィルタリングし、フォームを送信すると、私は[「フィールド_」+フィールド識別子]場合、Request.QueryStringを取得し、私はforeachの操作を行うと、このように:
var ads = from s in adsViewModel select s;
var fields = Db.Fields.GetAll();
foreach (var field in fields)
{
int fieldValue;
var requestField = Int32.TryParse(Request.QueryString["field_" + field.FieldId], out fieldValue);
ads = ads.Where(s => s.FieldsValues.Any(x => x.ValueId == fieldValue));
}
うまく動作します。
ただし、検索結果では、フィールドには重大な基準がある場合にのみADSが返されます。たとえば:
広告は、2つのフィールドがあります:ユーザーがお部屋= 7を選択した場合
部屋= 7(ValueId)
駐車スペース= 3(ValueId)
検索のみ機能し、そしてパーキングスペース= 3
ユーザーがフィルターのみルーム= 7を選択した場合、要求内の値はfield_1=7, field_2=0
であり、検索ではnullが返されます。リクエスト内の値のいずれかがゼロの場合
をスキップすることができます(つまり、それは '[7、0]')ですか? –
はい。 7、0. field_1 = 7、field_2 = 0。 –
これで 'foreach'の中でゼロをテストできます。もしそうなら、クエリの実行をスキップします。 (例えば 'if(fieldValue == 0){continue;}')現在、その値がゼロの場合、 'ads = ads.Where(s => s.FieldsValues.Any(x => x.ValueId == 0)); 'あなたが' ValueId == 0'で値を持っていないと仮定しても結果を返しません。 –