首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以将Linq查询的结果赋值给同一查询的源变量吗?

我可以将Linq查询的结果赋值给同一查询的源变量吗?
EN

Stack Overflow用户
提问于 2011-08-24 20:06:49
回答 3查看 1.2K关注 0票数 0

例如,我可以这样做吗?

代码语言:javascript
复制
myList = myList.where(x=>x>10).select(x=>x-10);

其中myListEnumerable<int>

我担心,由于它是一个懒惰的列表,它可能会导致一些问题,例如无限循环。(在这种情况下可能不会发生,但在其他情况下会发生吗?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-24 21:00:07

你可能会遇到问题,如果你使用类型推断(var),如果你特别声明你的返回类型是底层接口类型,那么你应该没问题。Select可以返回IEnumerable或IQueryable (对于LINQ2SQL/EF)。因此,如果您按如下方式实例化它,您应该没问题:

代码语言:javascript
复制
IEnumerable<int> myList = nums;
myList = myList.Where(x => x > 10).Select(x => x - 10);

这通常在根据用户输入动态添加到查询时使用,如下所示:

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2011-08-24 20:13:21

只要将结果转换回基类型,就可以实现。如果myList为IEnumerable,则需要使用.AsEnumerable()进行转换

代码语言:javascript
复制
myList = myList.where(x=>x>10).select(x=>x-10).AsEnumerable();
票数 1
EN

Stack Overflow用户

发布于 2011-08-24 20:09:52

这条线没有问题。右侧将在赋值之前进行计算,因此它与x = x + 1一样无害,而x只是一个int

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7175137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档