2012-08-03 3 views
4

다음과 같은 구조가 있습니다. 위의 하나에서 제네릭에서 반환 된 객체로 부울 값을 얻는 방법

public class ExportStructure 
    { 
     public string issueid { get; set; } 
     public string filename {get;set;} 
     public bool export { get; set; } 
    } 
public class ExportStructureManager 
    { 
     public List<ExportStructure> ExportIntoStructure { get; set; } 
     public ExportStructureManager() 
     { 
      this.ExportIntoStructure = new List<ExportStructure>(); 
     } 
     public ExportStructure AddToStructure(string issueid,string filename,bool exportornot) 
     { 
      ExportStructure expstr = new ExportStructure(); 
      expstr.issueid = issueid; 
      expstr.filename = filename; 
      expstr.export = exportornot; 

      this.ExportIntoStructure.Add(expstr); 
      return (expstr); 
     } 
     public bool GetStatusFromStructure(string issuekey) 
     { 
      return (from p in ExportIntoStructure 
       where p.issueid == issuekey 
       select p.export)); 
     } 
    } 

, 나는 GetStatusFromStructure는 그것이 나에게 export 재산 상태를 반환해야 함을 실행합니다. 저것을 위해 나는 이렇게 썼다. 그러나 어떻게이 문제를 해결하기 위해

암시 적 형식 '부울'select p.export 에서

에 'System.Collections.Generic.IEnumerable을'변환 할 수 없습니다와 같은 오류를주고있다?

+2

이 아니어야합니다. '어디에 p.issueid == issuekey' –

답변

11

문제는 쿼리가 시퀀스bool 값 (필터와 일치하는 각 레코드 당 하나)을 가져 오는 것입니다.

return (from p in ExportIntoStructure 
     // I assume you meant == rather than = 
     where p.issueid == issuekey 
     select p.export).Single(); 

을하지만 당신은 또한 여러 결과 나 전혀이 있으면 일이 원하는 것을 고려해야합니다 : 당신이 Single을 사용할 수 있도록 아마도 당신은 단지 하나의 결과를 기대하고 있습니다. 옵션은 다음과 같습니다

  • Single
  • SingleOrDefault
  • First
  • FirstOrDefault
  • Last
  • LastOrDefault

하나가 적절한 어떤 당신이 그 상황에있을 행동을 원하는 것에 달려 있습니다.

또한 만드는 것을 고려할 수 있습니다이 아닌 쿼리 표현 :

return ExportIntoStructure.Where(p => p.issueid == issuekey) 
          .Select(p => p.export) 
          .Single(); 

심지어 다음 프로젝트를 먼저 단일 개체에 일치 :

return ExportIntoStructure.Single(p => p.issueid == issuekey) 
          .export; 
1

변경 문

return (from p in ExportIntoStructure 
      where p.issueid = issuekey 
      select p.export)); 

to

return (from p in ExportIntoStructure 
      where p.issueid == issuekey 
      select p.export)).Single(); 

하지만 문제 키가 존재하는지 확인하십시오. 그렇지 않으면 예외가 발생합니다. 또는 기본값을 시도하십시오.

return (from p in ExportIntoStructure 
      where p.issueid == issuekey 
      select p.export)).SingleOrDefault(); 
0

thw 쿼리 끝에 FirstOrDefault 익명 메소드를 추가하십시오.

return (from p in ExportIntoStructure 
      where p.issueid = issuekey 
      select p.export)).FirstOrDefault(); 

FirstOrDefault (또는 SinlgeOrDefault()) annonymous 방법은 어떤 결과가없는 경우 첫 번째 또는 단일 onoy 사용할 경우, 그것은, null를 돌려줍니다 좋은, 가치가없는 경우, 오류가 발생합니다있다!

0

변경이 할 수있는 기능 :

public bool GetStatusFromStructure(string issuekey) 
    { 
     return (from p in ExportIntoStructure 
       where p.issueid = issuekey 
       select p.export).FirstOrDefault()); 
    } 

그러나 거짓 즉, 일치가없는 경우는 부울 기본이 될 것이라는 점을주의해야합니다.

관련 문제