C# 限制列表的返回。其中

C# 限制列表的返回。其中,c#,linq,list,windows-phone-7,C#,Linq,List,Windows Phone 7,我想限制此代码的返回: Listx.AddRange(suggestions.Where(x => x.Contains(content))); 因此,只有不到7项将被添加。以这种方式尝试,但感觉不太对劲,而且速度相当慢,因为listx包含SUP到100个入口 Listx.AddRange(suggestions.Where(x => x.Contains(content)&&Listx.Count <= 6)); Listx.AddRange(sugges

我想限制此代码的返回:

Listx.AddRange(suggestions.Where(x => x.Contains(content)));
因此,只有不到7项将被添加。以这种方式尝试,但感觉不太对劲,而且速度相当慢,因为listx包含SUP到100个入口

Listx.AddRange(suggestions.Where(x => x.Contains(content)&&Listx.Count <= 6));

Listx.AddRange(suggestions.Where(x=>x.Contains(content)&&Listx.Count您可以使用Enumerable.method来限制任何Linq查询的结果

Listx.AddRange(suggestions.Where(x => x.Contains(content)).Take(6));

如果我是你,你会熟悉的,在那里你会找到Linq框架上可用的每个操作的示例。

这不是创建了一个最多N个的列表,然后最多占用N个的6个吗?似乎只是创建一个新的扩展方法,这两种方法都可以做到…@willmel No,
take
在前面进行迭代然后停止
Where
表达式的6个元素。不创建临时列表,因为这只是一个
IEnumerable
链。但是Where表达式不完整吗?(即,可能获取6个以上的项)@willmel否,
Where
方法将返回一个
IEnumerator
对象,但不会遍历元素。它将被传递到
Take
,后者将控制整个表达式:在6个元素之后,它只是结束迭代。整个Linq表达式将被传递到下面的QueryProvider中,并在那里进行翻译例如,在TSQL中,它会生成这样一个脚本“select top 6 x where CHARINDEX(content,x)!=0”等等。这就是Linq的优点,除非您告诉它,否则它不会执行a查询。如果您添加了“.ToList().Take(6)”,那么查询就会执行(获取所有项目)并且在客户端减少了捕获量。