2015-02-20 2 views
-3

Я использовал один список EmployeeID, и я хочу найти сотрудника из таблицы employee, где id сотрудника существует в списке EmployeeID с использованием LINQ.Как использовать список в LINQ с помощью оператора Contains или Exist или equal

Я пробовал этот запрос, но это дало мне ошибку.

objAbs.LstAbscon = (from p in db.Employees 
    where p.Isdeleted != true && p.CNO == iCNO && p.EmpId.Equals(empIdLst.Any()) 
    where p.Isdeleted != true && p.CNO == iCNO && empIdLst.All(l => l.EmpId.Equals(p.EmpId)) 
    where p.Isdeleted != true && p.CNO == iCNO && empIdLst.Contains(p.EmpId) 
    select new AbsconModel 
    { 
     EmpId = p.EmpId, 
     PCODE = p.PCODE, 
     PNAME = p.PNAME, 
     Department = p.Dept, 
     Designation = p.Desig, 
    }).ToList(); 

В запросе я добавил три предложения where.

Просьба внести предложения для исправления моего запроса.

«empIdLst» является Список Employee идентификаторов

+0

Какие ошибки вы получаете? Особенно на третьем месте, где единственное, что на самом деле означает что-то? –

+0

Если вы придумали 3 разных подхода, почему бы не попробовать каждый отдельно, чтобы увидеть, какие результаты? – juharr

+0

Простым способом разбить ваш запрос является чтение его назад, 'select',' where', 'from',' in'. Если вы это сделаете, это уменьшит когнитивную нагрузку, по-моему, в любом случае. У вас много повторного повторного кода в этом 'where p.Isdeleted! = True && p.CNO == ICNO' Я бы попытался сократить это, особенно в более крупном запросе, дублированные запросы замедлят общую скорость Ваш запрос. – CalebB

ответ

-1

empIdLst.Any() вернется true или false зависит ли это пустой или нет.

Похоже, вам нужен только третий:

where p.Isdeleted != true && p.CNO == iCNO && empIdLst.Contains(p.EmpId) 

Что вернуться с этим условием?

+0

почему -ve голосовать по этому поводу? –

0

вы должны использовать только этот

p.Isdeleted != true && p.CNO == iCNO && empIdLst.Contains(p.EmpId) 
Смежные вопросы