获取其键匹配id列表(或数组)的实体

时间:2011-08-10 12:49:44

标签: linq linq-to-entities entity-framework-4.1

我正在使用CodeFirst EntityFramework。我有一个使用context.Users返回的IQueryable<User>个实体;其中context是EntityFramework的DbContext。从这个列表中我必须选择Id包含在Ids(long)数组中的那些。 Id是用户实体的主键。我尝试了以下但是编译错误。

IQueryable<User> users = GetQueryableUsers(); 
long [] ids = GetSelectedIds(); //array of long representing Ids key of User entities
users.Intersect(ids); // compilation error
users.Where(user => ids.Contains(user.Id)); //compilation error

编译错误(未找到Intersect / Contains的定义) 注意:System.Linq已导入。

2 个答案:

答案 0 :(得分:15)

确保您引用的是System.Linq

e.g。 using System.Linq

然后user.Id必须是long类型。你在评论中说过它很长?因为你相信你需要使用主键。解决方案是使用long并使用实体框架的autogenerate id选项。

或者,对于可能为null的非主键,更常见的情况是将contains选项与值或默认运算符一起使用。

users.Where(user=>ids.Contains(user.id??0));

答案 1 :(得分:-1)

您的问题是您无法在长ID上与用户相交。 Intersect只能用于相同类型的IEnumerables。

您应该使用user.Id.GetValueOrDefault(),因为您的ID为long?而不是long