什么是有效的实体框架查询来检查用户是否是朋友?

时间:2011-06-07 07:51:49

标签: c# entity-framework entity-framework-4 linq-to-entities

有一个名为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)
        ));
}

这里有比||更好的方法吗?

1 个答案:

答案 0 :(得分:6)

我认为如果User1ID和User2ID列都是主键列,则此查询会导致索引搜索并且非常有效。在不分析执行计划的情况下调整查询是非常低效的。对于重要的查询,我建议您使用SQL Server(或任何DBMS)编写和分析您的查询,然后将这些查询转换为LINQ查询。这并不难。