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)