2017-02-21 5 views
1

は、C#でのLINQにこのSQL文を変換するために私を助けてください:この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

WHEREステートメイルにマルチモードを適用したい –

+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) 
     ) 
    }); 
関連する問題