2016-04-18 10 views
1

値:検索フィルタと、私は4クラス持っ

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が返されます。リクエスト内の値のいずれかがゼロの場合

+0

をスキップすることができます(つまり、それは '[7、0]')ですか? –

+0

はい。 7、0. field_1 = 7、field_2 = 0。 –

+0

これで 'foreach'の中でゼロをテストできます。もしそうなら、クエリの実行をスキップします。 (例えば 'if(fieldValue == 0){continue;}')現在、その値がゼロの場合、 'ads = ads.Where(s => s.FieldsValues.Any(x => x.ValueId == 0)); 'あなたが' ValueId == 0'で値を持っていないと仮定しても結果を返しません。 –

答えて

3

、そしてあなたのクエリがadsがあなたのテーブルに行がValueId == 0に存在しないと仮定すると、空のコレクションになる意味

ads = ads.Where(s => s.FieldsValues.Any(x => x.ValueId == 0)); 

に等しくなります。

あなたは値のいずれかがゼロであるかどうかをテストするif文を使用し、もしそうなら、あなたが唯一のフィルタ値を選択した場合、fields`を `の値をしているどのようなクエリ

foreach (var field in fields) 
{ 
    int fieldValue; 
    var requestField = Int32.TryParse(Request.QueryString["field_" + field.FieldId], out fieldValue); 
    if (fieldValue == 0) 
    { 
     continue; 
    } 
    ads = ads.Where(s => s.FieldsValues.Any(x => x.ValueId == fieldValue)); 
} 
関連する問題