2016-10-11 3 views
0

Я пытаюсь создать LINQ, чтобы получить записи в таблице Personnel, которые существуют в таблице Users. Вот учебник, в котором я в данный момент: Convert the Results of a LINQ Query to an Array.Преобразование LINQ с моделью в массив

Однако, когда я пытаюсь реализовать его в своих кодов у меня ошибка: '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

Содержит в ожидании экземпляра UserModel будет принят, поэтому вы получите сообщение об ошибке. Просто используйте .any() вместо:

var matches = from p in db.PERSONNEL_MSTR 
      where userList.Any(u=> u.ID == p.EMP_ID) 
      select p; 

Что она делает здесь: Если p.EMP_ID находится внутри USERLIST, чем он выбран.

+0

Спасибо за ваше время, сэр, мне нравится, как это очень просто. Я попробую это тоже и проведу с другим ответом, чтобы узнать, что более удобно для всего моего проекта. –

2

На самом деле вы сделали ошибку в этом

userList.Contains(p.EMP_ID) 

USERLIST является IQueryable <UserModel> объект, это не IQueryable < строка > массив, с другой стороны 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; 
+0

Спасибо, человек! Я уже реализовал ваш, но еще не запускал программу, поскольку я все еще настраивал некоторые другие элементы. Будет ли тег принят так, как только он выполнит успешно –

+0

, как я могу поместить несколько столбцов в строку [] userIdList'? Потому что я хочу, чтобы некоторые детали в «var users» отображались также в 'var matches'. Я полагаю, что я должен изменить этот код 'users.Select (u => u.emp_id.ToString()). ToArray()' включить больше, чем просто 'emp_id', но не уверен, как –

+0

И у меня ошибка с использованием анонимный тип –

Смежные вопросы