2017-02-21 44 views
1

請幫我這個SQL語句轉換的LINQ C#:如何轉換這個SQL語句在C#中的LINQ?

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

我想申請多模到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',因爲他只有%的底;所以'Contains'將不起作用 – bc004346

0
​​
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) 
     ) 
    });