如何在c#中的lambda表达式中应用多个条件以及大于条件
本文关键字:条件 大于 应用 中的 表达式 lambda | 更新日期: 2023-09-27 18:20:44
我继续我的问题上一个问题。在我的最后一个问题中,@p.s.w.g给出了我想要的精确解。现在我想到了另一种情况,假设我们需要在一个条件下搜索greater then 4
,那么我们该怎么办。
详细信息
在我的最后一个问题中,我说标准将上升到1-4
,假设我们包括更多的标准,并给用户一个选择4+
的选项,我们将返回Bedroom
大于4的所有数据。在这种情况下我们会怎么做。
假设我在我的过滤变量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));
扩展我之前的回答,假设您有以下内容:
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));
如果您不断添加不同的筛选选项,您可以尝试手动解析筛选字符串,然后使用PredicateBuilder 实现谓词逻辑