Il existe une table appelée UserFriends
qui contient des enregistrements pour les amitiés des utilisateurs. Pour chaque amitié, il y a juste un recordQu'est-ce qu'une requête Entity Framework efficace pour vérifier si les utilisateurs sont amis?
User1ID User2ID IsConfirmed
1 2 true
qui est égale en termes de logique métier à
User1ID User2ID IsConfirmed
2 1 true
mais les deux ne peut se produire pour une paire.
Ce qui est le plus efficace (encore lisible et ne comportant pas SQL ordinaire) Entity Framework de requête pour déterminer si l'utilisateur A est un ami de l'utilisateur B, étant donné que nous ne savons pas lequel d'entre eux est dans la première ou la seconde colonne ?
Ma tentative est simple et évidente:
public bool AreFriends (int user1Id, int user2Id)
{
return MyObjectContext.UserFriends
.Any (uf => uf.IsConfirmed && (
(uf.UserID == user1Id && uf.FriendUserID == user2Id)
|| (uf.UserID == user2Id && uf.FriendUserID == user1Id)
));
}
Y at-il une meilleure façon que ||
ici?
Si les colonnes User1ID et User2ID sont toutes les deux des colonnes de clé primaire, cette requête provoque l'analyse d'index et est si efficace. Avez-vous vu le plan d'exécution de cette requête? – Arian
@Nima: Non je ne l'ai pas fait. Donc, les avoir tous les deux comme clés rendent la requête efficace? Je ne suis pas vraiment un type de base de données et apprécie la contribution comme ceci. Pouvez-vous s'il vous plaît poster votre commentaire comme une réponse afin que je puisse le convertir, et le marquer comme correct si rien d'autre ne se présente? –
@gaearon - Non, ils ne sont pas 'les deux clés' ils sont la clé, quand vous créez votre clé primaire/index cluster sur la table, il doit être à la fois à travers User1ID et UserID2. – Phill