首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Enumerable中LINQ Enumerable -为什么?

在Enumerable中LINQ Enumerable -为什么?
EN

Stack Overflow用户
提问于 2012-03-16 20:15:55
回答 8查看 4.1K关注 0票数 0

我有一个包含User对象列表的Ticket类:

代码语言:javascript
复制
class Ticket {
    public List<User> Users { get; set; }
}

我想要获取所有与票证相关的用户。我这样做:

代码语言:javascript
复制
var u = from t in db.Tickets
        where t.Users.Count() > 0
        select t.Users

这是可行的,但会返回一个包含1个元素的Enumerable。该元素是一个包含用户的Enumerable

为什么它是嵌套的?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-03-16 20:22:54

你需要做的是

代码语言:javascript
复制
  var u = (from t in db.Tickets from user in t.Users select user).ToList();

然后,您将拥有一个扁平化的用户列表。没有必要检查where t.Users.Count() > 0,如果你需要检查,你应该使用where t.Users.Any()来提高效率。

票数 4
EN

Stack Overflow用户

发布于 2012-03-16 20:23:35

因为您选择了List<User>IEnumerable<Users> ...

第二个枚举对象是您的List<User>

您可以使用以下查询将其展平。

代码语言:javascript
复制
db.Tickets.Where(t => t.Users.Any()).SelectMany(t => t.Users)

Any()Count() > 0快得多,因为它会在第一次出现时停止计数,对您拥有的完整用户列表进行计数迭代

票数 4
EN

Stack Overflow用户

发布于 2012-03-16 20:18:35

因为它不会将所有t.Users (t0.Users,t1.Users...)合并到一个列表中。您需要将它们组合起来。

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

https://stackoverflow.com/questions/9737065

复制
相关文章

相似问题

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