2017-02-21 2 views
1

Пожалуйста, помогите мне, чтобы преобразовать этот SQL заявление Linq в C#:Как преобразовать этот оператор SQL в linq в C#?

string cmd = "SELECT * FROM dbo.Personnel WHERE (dbo.Personnel.FName LIKE 
    @FName + '%' AND dbo.Personnel.LName LIKE @LName +'%')"; 

if (objPPersonnel.PersonnelCode != 0) 
{ 
    cmd += "AND (dbo.Personnel.PersonnelCode [email protected]) "; 
} 

if (objPPersonnel.NationalCode != "0") 
{ 
    cmd += "AND (dbo.Personnel.NationalCode [email protected]) "; 
} 

if (objPPersonnel.OrganizationPostId > 0) 
{ 
    cmd += "AND (dbo.Personnel.OrganizationPostId [email protected]) "; 
} 
+1

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

+0

Я хочу применить multi-mode к WHERE statemet –

+1

Напишите код самостоятельно и сообщите нам, если вы столкнулись с какой-либо проблемой или ошибкой при написании. Сначала попробуйте преобразовать себя. – Versatile

ответ

0

Я не уверен, если это то, что вы спрашиваете:

var query = from c in dbContext.Personnel 
       where c.Personnel.LName.Contains(parLName) 
       $$ ((c.Personnel.PersonnelCode = parPersonnelCode && parPersonnelCode != 0)||parPersonnelCode == 0) 
       $$ ((c.Personnel.NationalCode = parNationalCode && parNationalCode != 0)||parNationalCode == 0) 
       $$ ((c.Personnel.OrganitationPostId = parOrganitationPostId && parOrganitationPostId > 0)||parOrganitationPostId == 0) 
       select c; 
+0

Я думаю, что '$$' - это фрейдистская опечатка. Кроме того, лучше сформулировать запрос условно (с помощью построителя предикатов) вместо того, чтобы иметь эти '! = 0' проверки внутри него. –

+0

Он не ищет 'Contain', потому что у него только% в конце; поэтому 'Содержит' не будет работать – bc004346

0
persons.Where(p => p.FirstName.StartsWith("firstName") && 
          p.LastName.StartsWith("lastName") && 
          (p.PersonCode != 0 ? p.personCode == personCode : true) ... 
0

Это будет делать:

var result = Personnel 
    .Where(p => 
    { 
     p.FName.IndexOf(firstName) == 0 
     && p.LName.IndexOf(lastName) == 0 
     && 
     (
      (p.PersonnelCode == personnelCode && objPPersonnel.PersonnelCode != 0) || 
      (p.NationalCode == nationalCode && objPPersonnel.NationalCode != 0) || 
      (p.OrganizationPostId == organizationPostId && objPPersonnel.OrganizationPostId != 0) 
     ) 
    }); 
Смежные вопросы