Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 参数为数组的Linq Contains方法的效率_C#_Performance_Linq - Fatal编程技术网

C# 参数为数组的Linq Contains方法的效率

C# 参数为数组的Linq Contains方法的效率,c#,performance,linq,C#,Performance,Linq,给定一个如下所示的实体: public ICollection<UserActivity> Activities { get; set; } public ICollection<UserTraining> Training { get; set; } 编写上述方法实现的最有效方法是什么。如果我传入的是一个非数组整数,这将很简单,但我想知道编写它以避免多次数据库调用的最佳方法 我正在使用Linq来创建实体 操作应该返回具有任何活动或培训ID的用户,而不是所有用户。使

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

 public ICollection<UserActivity> Activities { get; set; }
 public ICollection<UserTraining> Training { get; set; }
编写上述方法实现的最有效方法是什么。如果我传入的是一个非数组整数,这将很简单,但我想知道编写它以避免多次数据库调用的最佳方法

我正在使用Linq来创建实体


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

使用Contains是我发现的最好的方法。这里有一篇以前的帖子非常详细地介绍了它:@jfrankcarr谢谢,但是Contains不包含数组的重载。Contains有一个IEnumerable/array扩展。Linq带来了它。任务是让所有参加过给定活动或培训的用户都参与进来吗?如果是,在
UserActivity
UserTraining
@DavidColwell上是否都有用户属性?否,这些对象上没有返回给用户的属性,因为它是多对多的;操作应该是OR,而不是AND
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();
}
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();
}