使用linq

时间:2017-07-26 08:02:27

标签: c# linq

我想使用linq查询带有n个元素的排序列表,这样我就可以在第一个和最后一个之间获得元素。

我尝试了以下内容,但看起来并不好看:

var result1 = myList.Skip(1).Take(myList.Count()-2);

var result2 = myList.GetRange(1, myList.Count()-2);

还有其他方法可以实现目标吗?

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