使用List <int> </int>中的ID过滤linq

时间:2015-02-12 13:34:00

标签: c# linq asp.net-mvc-5

我需要做一个过滤器,使用列表中包含的参数来请求数据。

if (filter.Sc.Count > 0)
    socios.Where(s => filter.Sc.Contains(s.ScID));

我尝试这种方式,但这不起作用,我也试过......

socios.Where( s => filter.Sc.All(f => f == s.ScID));

我怎么能做这样的过滤器?

2 个答案:

答案 0 :(得分:6)

socios.Where(s => filter.Sc.Contains(s.ScID));

返回过滤的查询。它不修改查询。您忽略了返回的值。你需要这样的东西:

socios = socios.Where(s => filter.Sc.Contains(s.ScID));

但是根据socios的类型,确切的语法可能会有所不同。

答案 1 :(得分:1)

除了需要使用LINQ .Where()的返回值之外,您的第二个语句中可能存在逻辑错误。 .Contains()的等效逻辑是检查元素的Any是否通过了匹配条件。在您的情况下,第二个语句将是

var filteredSocios = socios.Where( s => filter.Sc.Any(f => f == s.ScID));

当然,如果您可以直接比较对象到对象,只要您记得使用返回值,.Contains()仍然足够。