我正在尝试创建一个LINQ来获取Users表中存在的Personnel表中的记录。这是我目前正在关注的教程:Convert the Results of a LINQ Query to an Array。
但是,当我尝试在我的代码中实现它时,我遇到了错误:'UserModel[]' does not contain a definition for 'Contains' and the best extension method overload 'Queryable.Contains<string>(IQueryable<string>, string)' requires a receiver of type 'IQueryable<string>'
var users = from u in db.USR_MSTR select new UserModel { emp_id = u.EMP_ID };
UserModel[] userList = users.ToArray();
var matches = from p in db.PERSONNEL_MSTR
where userList.Contains(p.EMP_ID) //userList is generating the error above
select p;
答案 0 :(得分:2)
包含正在等待传递UserModel实例,这就是您收到错误的原因。只需使用.Any()代替:
var matches = from p in db.PERSONNEL_MSTR
where userList.Any(u=> u.ID == p.EMP_ID)
select p;
它的作用是:如果在userList中找到了p.EMP_ID,那么它将被选中。
答案 1 :(得分:2)
其实你在这个
中犯了一个错误userList.Contains(p.EMP_ID)
userList是 IQueryable&lt; UserModel&gt; 对象,它不是 IQueryable&lt; string&gt; 数组,另一方面p.EMP_ID是一个字符串,这就是为什么你有这个错误。
您需要将其修复为以下内容
List<string> userIdList = users.Select(u => u.emp_id.ToString()).ToList();
var matches = from p in db.PERSONNEL_MSTR
where userIdList.Contains(p.EMP_ID)
select p;