1

質問を続けています前の質問。私の最後の質問で、@pswg は私が望む正確な解決策を提供します。ここで、別の状況が頭に浮かびgreater then 4ます。ある条件で検索する必要があるとしたら、どうすればよいでしょうか。

詳細

最後の質問で、基準が まで上がると言いました1-4。より多くの基準を含めて、ユーザーに選択オプションを与え、が 4 より大きい4+すべてのデータを返すとします。Bedroomこの場合、私たちは何をしますか。

フィルター変数でこれを取得したとしますvar filter = "1,4,4+";

この状態ではListings、ベッドルームが1または4またはのいずれかであるすべてのユーザーを返す必要がありますGreater then 4

私が試したこと

var bedCriteria = "1,4,4+";
bedCriteria  = bedCriteria .Split(',').ToList();
bool isGreaterThenCriteria = bedCriteria.Contains("4+");
if (isGreaterThenCriteria)
{
     query = query.Where(l => l.Place.Bedroom > 4);
     bedCriteria.Remove("4+");
}

var minBeds = bedCriteria.Select(int.Parse);
query = query.Where(l => minBeds.Contains(l.Place.Bedroom.Value));
4

2 に答える 2

1

私の以前の答えを拡張して、これがあるとします:

var minBeds = "1,2,4".Split(',').Select(int.Parse);
query = query.Where(l => minBeds.Contains(l.Place.Bedroom));

これを次のように変更できます...

var minBedStrings = "1,4,4+".Split(',');
var has4plus = minBedStrings.Contains("4+");
var minBeds = minBedStrings.Where(x => x != "4+").Select(int.Parse);
query = query.Where(l => minBeds.Contains(l.Place.Bedroom) || 
                         (has4plus && l.Place.Bedroom > 4));

のようなものを処理したい場合"5+""6+"...

var minBedStrings = "1,4,4+".Split(',');
var nplus = minBedStrings.Where(x => x.Last() == '+')
                         .Select(x => (int?)int.Parse(x.Substring(0, x.Length - 1))
                         .OrderBy(x => x)
                         .FirstOrDefault();
var minBeds = minBedStrings.Where(x => x.Last() != '+')
                           .Select(int.Parse);
query = query.Where(l => minBeds.Contains(l.Place.Bedroom) || 
                         (nplus.HasValue && l.Place.Bedroom > nplus.Value));
于 2013-07-02T07:04:47.650 に答える
0

さまざまなフィルタリング オプションを追加し続ける場合は、フィルター文字列を手動で解析してから、PredicateBuilderで述語ロジックを実現できます。

于 2013-07-02T07:09:40.570 に答える