例如,我可以这样做吗?
myList = myList.where(x=>x>10).select(x=>x-10);其中myList为Enumerable<int>
我担心,由于它是一个懒惰的列表,它可能会导致一些问题,例如无限循环。(在这种情况下可能不会发生,但在其他情况下会发生吗?)
发布于 2011-08-24 21:00:07
你可能会遇到问题,如果你使用类型推断(var),如果你特别声明你的返回类型是底层接口类型,那么你应该没问题。Select可以返回IEnumerable或IQueryable (对于LINQ2SQL/EF)。因此,如果您按如下方式实例化它,您应该没问题:
IEnumerable<int> myList = nums;
myList = myList.Where(x => x > 10).Select(x => x - 10);这通常在根据用户输入动态添加到查询时使用,如下所示:
IEnumerable<int> myList = nums.OrderBy(x => x);
if (applyFilter)
myList = myList.Where(x => x > 10).Select(x => x - 10);请注意,如果您在上面的示例中使用var myList = myList实例化您的数字,它将无法编译,因为OrderBy返回IOrderedEnumerable和Where,并选择返回IEnumerable,否则将更改myList的类型。
另一件需要注意的事情是,如果您采纳了John Oxley的建议,在IQueryable源上使用.ToEnumerable() (或者我上面提到的),它将强制从数据库获取数据,并且任何后续的查询添加都将应用于客户端。如果您想将其保留在服务器端,请将其声明为IQueryable而不是IEnumerable。
发布于 2011-08-24 20:13:21
只要将结果转换回基类型,就可以实现。如果myList为IEnumerable,则需要使用.AsEnumerable()进行转换
myList = myList.where(x=>x>10).select(x=>x-10).AsEnumerable();发布于 2011-08-24 20:09:52
这条线没有问题。右侧将在赋值之前进行计算,因此它与x = x + 1一样无害,而x只是一个int。
https://stackoverflow.com/questions/7175137
复制相似问题