我想使用linq查询带有n个元素的排序列表,这样我就可以在第一个和最后一个之间获得元素。
我尝试了以下内容,但看起来并不好看:
var result1 = myList.Skip(1).Take(myList.Count()-2);
var result2 = myList.GetRange(1, myList.Count()-2);
还有其他方法可以实现目标吗?
答案 0 :(得分:2)
您必须考虑到LinQ将根据需要执行尽可能多的循环以实现其目的。有时,编写自己的循环将获得更好的结果。然后将循环封装到扩展方法中,然后获得一行解决方案:
namespace System.Linq
{
public static class MyLinqExtensions
{
public static IEnumerable<T> Range<T>(this IEnumerable<T> input, int start, int end)
{
int i = 0;
foreach(var item in input)
{
if(i < start) continue;
if(i > end) break;
yield return item;
i++;
}
}
}
}
答案 1 :(得分:1)
这是最好的方式
var result1 = myList.Skip(1).Take(myList.Count()-2);
这是Linq查询的最佳方式,因为Getrange不接受Negative Numer。
例如: MyList是没有记录然后Skip And Take方法执行Linq查询输出是空列表结果但Getrange方法抛出异常为“非负数需要。 参数名称:count “