使用Linq Contains方法的效率,其中parameter是一个数组

时间:2013-07-19 03:23:13

标签: c# performance linq

给定一个如下所示的实体:

 public ICollection<UserActivity> Activities { get; set; }
 public ICollection<UserTraining> Training { get; set; }

并希望根据ID数组过滤用户,即调用以下方法:

public User[] GetUsers(int[] activityIds, int[] trainingIds)

编写上述方法实现的最有效方法是什么。如果我传入一个非数组整数,那将是微不足道的,但我想知道编写它的最佳方法,以避免多次数据库调用。

我正在使用Linq to Entities。

该操作应该返回具有任何活动或培训ID的用户,而不是所有活动或培训ID。

1 个答案:

答案 0 :(得分:2)

public User[] GetUsers(int[] activityIds, int[] trainingIds)
{
    return _context.Users
        .Where(u => u.Activities.Any(a => activityIds.Contains(a.Id)) ||
                    u.Training.Any(t => trainingIds.Contains(t.Id)))
        .ToArray();
}