.net - 如何使用 linq 从父对象检索孙对象

标签 .net linq database-design

我的数据库架构中有几个父 > 子 > 孙子关系。通常,我有 parent ,我想要一些关于孙子的信息。例如,我有一个用户,他拥有一系列社交网络,其中包含 friend 的集合。我发现自己一遍又一遍地编写这段代码。

        var friends = new List<Friend>();
        foreach (var socialNetwork in user.UserSocialNetworks)
        {
            foreach (var friend in socialNetwork.Friends)
            {
                friends.Add(friend);
            }
        }

有没有更优雅的方式来用 linq 做到这一点?

我真正想做的是“user.Friends”,但我必须在 friend 表中为用户放置一个外键,这闻起来不太对劲。这就是它的样子:
User          {Id,..}
SocialNetwork {Id, UserId, ...}
Friend        {Id, SocialNetworkId, UserId, ... }

想法?

最佳答案

您可以将代码作为 User 上的方法编写一次。类(class):

partial class User
{
   public IEnumerable<Friend> Friends()
   {
     return from socialNetwork in this.UserSocialNetworks
            from friend in socialNetwork.Friends
            select friend;
   }
}

或者,您可以只使用 SelectMany() :
var friends = user.UserSocialNetworks.SelectMany(socialNtwk=>socialNtwk.Friends);

关于.net - 如何使用 linq 从父对象检索孙对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022900/

相关文章:

.net - ASP.NET MVC中数据注释的默认资源

c# - 读取具有未知根/父节点的 XML 节点时出现问题

design-patterns - 用户统计 : "interative calculation" or bulk calculation + caching

c# - 从 Web API 操作中的请求中检索 token 值

c# - 锁定字段或局部变量?

c# - 如何编写 SQL 交叉联接的 Linq 表达式?

c# - 使用 LINQ 优化基于值的搜索算法

c# - LINQ 搜索/匹配

php - 如何在mysql中存储顺序数据

mysql - 根据另一行的值选择一行