1

我正在继续我的问题Previous Question。在我的最后一个问题中,@pswg 给出了我想要的确切解决方案。现在我想到了另一种情况,假设我们需要greater then 4在一个条件下进行搜索,那么我们将做什么。

细节

在我的最后一个问题中,我说标准将上升到1-4,假设我们包含更多标准并为用户提供选择选项4+,我们将返回Bedroom大于四的所有数据。在这种情况下我们将做什么。

假设我在我的过滤器变量中得到了这个var filter = "1,4,4+";

在这种情况下,我们应该返回所有ListingsBedrooms 为1or4或的用户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 回答