Dot-Net
如何使用 linq 從父級檢索孫對象
我的數據庫架構中有幾個父>子>孫關係。通常,我有父母,我想要一些關於孫子孫女的資訊。例如,我有一個使用者,他擁有一系列社交網路,其中有很多朋友。我發現自己一遍又一遍地編寫這段程式碼。
var friends = new List<Friend>(); foreach (var socialNetwork in user.UserSocialNetworks) { foreach (var friend in socialNetwork.Friends) { friends.Add(friend); } }有沒有更優雅的方法可以用 linq 做到這一點?
我真正想做的是“user.Friends”,但我必須在朋友表中為使用者放置一個外鍵,這聞起來不對。這就是它的樣子:
User {Id,..} SocialNetwork {Id, UserId, ...} Friend {Id, SocialNetworkId, UserId, ... }想法?
您可以只編寫一次程式碼作為
User類上的方法: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);
我知道這很老,但我最近也遇到了同樣的事情,另一種選擇是反其道而行之。不是從使用者開始向下鑽取,而是從朋友開始並根據父(或祖父母)過濾。為此,您需要使用者的 ID。當層次結構變得更深時,我發現這更清晰。就像是:
return _db<your entities>.Friend .Where(f => f.SocialNetwork.User.Id == userId) .ToList();