我正在使用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已导入。
答案 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
。