C# 在c语言的lambda表达式中应用多个条件#
我有两个主表C# 在c语言的lambda表达式中应用多个条件#,c#,c#-4.0,lambda,c#-3.0,C#,C# 4.0,Lambda,C# 3.0,我有两个主表列表和位置。在列表中有一个字段PlaceId,它引用了一个Place实体/行/对象。我想对这两个表进行查询,这样就可以得到这两个表 var query = context.Listings .Include("Place") .Where(l => l.Place.TypeId == Type.Ro) .OrderBy(l => l.Id).ToList(); 在这之后,现在我想对这个查询设置一些过滤器,下面是条件 我只得到了
列表
和位置
。在列表中有一个字段PlaceId
,它引用了一个Place实体/行/对象。我想对这两个表进行查询,这样就可以得到这两个表
var query = context.Listings
.Include("Place")
.Where(l => l.Place.TypeId == Type.Ro)
.OrderBy(l => l.Id).ToList();
在这之后,现在我想对这个查询设置一些过滤器,下面是条件
我只得到了这样一个字符串var filter=“1,2,4”代码>。现在,我想对清单进行筛选,以获取卧房等于1、2或4的所有清单
我所做的
string minBeds = "1,2,4";
foreach (var item in minBeds.Split(','))
{
int minBed = int.Parse(item);
query = query.Where(l=>l.Place.Bedroom == minBed).ToList();
}
但这样做不会给我任何结果 你过滤它的方式有问题。第一次通过后,您将过滤掉除卧室==1
之外的所有内容,第二次通过时,您将过滤掉除卧室==2
之外的所有内容,但由于列表中只有卧室==1
,因此结果集中不会有任何内容
解决方案是使用传统的C#| |
运算符:
query = query.Where(l => l.Place.Bedroom == "1" ||
l.Place.Bedroom == "2" ||
l.Place.Bedroom == "4");
或者,如果您希望更灵活,请使用以下方法:
注意:如果是整数,则需要先将输入转换为适当的类型:
var minBeds = "1,2,4".Split(',').Select(int.Parse);
query = query.Where(l => minBeds.Contains(l.Place.Bedroom));
还要注意的是,我在这里删除了ToList
。除非您需要按索引访问项并从结果集合中添加/删除项,否则这很可能只是浪费资源。通常,您可以依靠Linq固有的惰性来延迟查询处理,直到您真正需要结果。您过滤结果的方式存在问题。第一次通过后,您将过滤掉除卧室==1
之外的所有内容,第二次通过时,您将过滤掉除卧室==2
之外的所有内容,但由于列表中只有卧室==1
,因此结果集中不会有任何内容
解决方案是使用传统的C#| |
运算符:
query = query.Where(l => l.Place.Bedroom == "1" ||
l.Place.Bedroom == "2" ||
l.Place.Bedroom == "4");
或者,如果您希望更灵活,请使用以下方法:
注意:如果是整数,则需要先将输入转换为适当的类型:
var minBeds = "1,2,4".Split(',').Select(int.Parse);
query = query.Where(l => minBeds.Contains(l.Place.Bedroom));
还要注意的是,我在这里删除了ToList
。除非您需要按索引访问项并从结果集合中添加/删除项,否则这很可能只是浪费资源。您通常可以依靠Linq的固有惰性来延迟查询处理,直到您真正需要结果。筛选字符串不是静态的,它可以是1-4
中的任何内容。它可能是1,3
1,4,2
或任何我问过的与此相关的问题。你能再帮我一点忙吗。筛选器字符串不是静态的,它可以是1-4
中的任何内容。它可能是1,3
1,4,2
或任何我问过的与此相关的问题。你能再帮我一点忙吗。