将LINQ与模型转换为数组

时间:2016-10-11 06:28:37

标签: c# arrays linq type-conversion

我正在尝试创建一个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;

2 个答案:

答案 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;