有一个名为UserFriends
的表,用于保存用户友谊的记录。
对于每个友谊,只有一个记录,
User1ID User2ID IsConfirmed
1 2 true
在业务逻辑方面与
相同User1ID User2ID IsConfirmed
2 1 true
但两个都不会发生在一对。
什么是最有效的(但可读且不涉及纯SQL) Entity Framework查询以确定用户A是否是用户B的朋友,考虑到我们不知道哪一个在第一列或第二列?
我的尝试很简单明了:
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)
));
}
这里有比||
更好的方法吗?
答案 0 :(得分:6)
我认为如果User1ID和User2ID列都是主键列,则此查询会导致索引搜索并且非常有效。在不分析执行计划的情况下调整查询是非常低效的。对于重要的查询,我建议您使用SQL Server(或任何DBMS)编写和分析您的查询,然后将这些查询转换为LINQ查询。这并不难。