2012-02-13 19 views
0

私はこのvb.netコードをC#に変換しようとしています。c#ラムダ式vbからcに変換#

 if (txtCompanyName.Text.Trim() != string.Empty) 
     { 
        decals = decals.Where(Function(CT_Decal d)(from c in db.CT_Companies 
               where c.CompanyName.Contains(txtCompanyName.Text.Trim()) 
               select c.CompanyID).ToList().Contains((from t in db.CT_Tanks                         where t.CargoTankID == d.TankID 
               select t.CompanyID).Single.ToString())); 

     }//end if 

C#のエラー:

名前の関数が存在しないと CT_Decalがタイプですが、変数のように使用されている

 If (txtCompanyName.Text.Trim() <> String.Empty) Then 
      decals = decals.Where(Function(d As CT_Decal) (From c In db.CT_Companies Where c.CompanyName.Contains(txtCompanyName.Text.Trim()) Select c.CompanyID).ToList.Contains((From t In db.CT_Tanks Where t.CargoTankID = d.TankID Select t.CompanyID).Single.ToString())) 
     End If 

は、C#で、私は、コードを入れてみました。

誰かがこれを正しく変換する方法を知っていますか?

+5

'txtCompanyName.Text.Trim()!= string.Empty'の代わりに必ず'!String.IsNullOrEmpty(txtCompanyName.Text) 'を使用してください。 – jp2code

+3

また、' ToList() 'は冗長でコードはコンパイルしないでくださいVBでは 'Where'は述語を期待していますが、ラムダは文字列を返しています。 –

+4

@ jp2codeこれらの式は等価ではありません。 txtCompanyName.Textに空白文字のみが含まれていると、結果が異なります。 – phoog

答えて

2

DBContextへのアクセスがないと、使用しているクエリの非効率性を無視して正確なクエリを提供することは困難です。

我々が持っているものから、私は、次のコードは、あなたが望むものにかなり近づく、あるいは少なくとも、あなたが始める必要があり期待:

 if (!String.IsNullOrWhiteSpace(txtCompanyName.Text)) 
     { 
      var result = 
       decals.Where(
        d => (
         from c in db.CT_Companies 
          where c.CompanyName.Contains(txtCompanyName.Text.Trim()) 
          select c.CompanyID 
        ).Contains(
         (from t in db.CT_Tanks where t.CargoTankID == d.TankID select t.CompanyID).Single())); 

私はあなたがセットアップをしている場合、これはまったく同じに機能することを期待あなたのDBContextは正しく:

 if (!String.IsNullOrWhiteSpace(txtCompanyName.Text)) 
     { 
      IEnumerable<Decal> result = 
       decals.Where(d => string.Equals(d.Tank.Company.CompanyName, txtCompanyName.Text.Trim()); 
0

あなたの問題はwhere句内のキーワード機能にあります。

このようなものを書く必要があります。どこか(d =>(....))。 「jessehouwing」返事を見てください。

構文.Where(function(f)....)は、C#でのラムダ式のVB.Netに相当します。 ラムダ式.Where(d =>(...))は、dが(何らかのアクションまたは式)に移動することを意味します。 これが役立つかどうかお知らせください。