如何使用linq从父级检索孙子对象

Dan*_*Eli 8 .net linq database-design

我的数据库模式中有几个父>子>孙子关系.通常,我有父母,我想要一些关于孙子的信息.例如,我的用户拥有一组社交网络,其中包含朋友的集合.我发现自己一遍又一遍地编写这段代码.

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

使用linq有更优雅的方法吗?

我真正希望能够做的是"user.Friends",但是我必须在朋友桌中为用户输入一个外键,这听起来并不合适.这是什么样子:

User          {Id,..}
SocialNetwork {Id, UserId, ...}
Friend        {Id, SocialNetworkId, UserId, ... }
Run Code Online (Sandbox Code Playgroud)

思考?

Mar*_*ade 13

您只需将代码编写一次作为User类的方法:

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

或者,你可以使用SelectMany():

var friends = user.UserSocialNetworks.SelectMany(socialNtwk=>socialNtwk.Friends);
Run Code Online (Sandbox Code Playgroud)

  • 的SelectMany!?!谁会想到?:) 谢谢! (2认同)