我有一个包含User对象列表的Ticket类:
class Ticket {
public List<User> Users { get; set; }
}我想要获取所有与票证相关的用户。我这样做:
var u = from t in db.Tickets
where t.Users.Count() > 0
select t.Users这是可行的,但会返回一个包含1个元素的Enumerable。该元素是一个包含用户的Enumerable。
为什么它是嵌套的?
发布于 2012-03-16 20:22:54
你需要做的是
var u = (from t in db.Tickets from user in t.Users select user).ToList();然后,您将拥有一个扁平化的用户列表。没有必要检查where t.Users.Count() > 0,如果你需要检查,你应该使用where t.Users.Any()来提高效率。
发布于 2012-03-16 20:23:35
因为您选择了List<User>的IEnumerable<Users> ...
第二个枚举对象是您的List<User>
您可以使用以下查询将其展平。
db.Tickets.Where(t => t.Users.Any()).SelectMany(t => t.Users)Any()比Count() > 0快得多,因为它会在第一次出现时停止计数,对您拥有的完整用户列表进行计数迭代
发布于 2012-03-16 20:18:35
因为它不会将所有t.Users (t0.Users,t1.Users...)合并到一个列表中。您需要将它们组合起来。
https://stackoverflow.com/questions/9737065
复制相似问题