Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言的lambda表达式中应用多个条件#_C#_C# 4.0_Lambda_C# 3.0 - Fatal编程技术网

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
或任何我问过的与此相关的问题。你能再帮我一点忙吗。