我需要做一个过滤器,使用列表中包含的参数来请求数据。
if (filter.Sc.Count > 0)
socios.Where(s => filter.Sc.Contains(s.ScID));
我尝试这种方式,但这不起作用,我也试过......
socios.Where( s => filter.Sc.All(f => f == s.ScID));
我怎么能做这样的过滤器?
答案 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()
仍然足够。