2012-02-13 3 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) ....)는 VB에서 C#의 람다 식과 동일합니다. 람다 식 .Where (d => (...))는 'd'가 간다는 것을 의미합니다 (일부 동작 또는 표현식). 도움이되는지 알려주세요.