2012-04-10 3 views
3

WCF 웹 서비스를 개발 중이며 ADO.Net 엔터티를 사용하여 데이터베이스에 액세스합니다.Loop a System.Data.Objects.DataClasses.EntityCollection

나는 물체를 계약 일부 데이터베이스 객체를 변환하려면이 방법을 사용하십시오

여기
public static List<BlockContract> FormBlocks(int formId) 
{ 
    List<BlockContract> blocksList = null; 

    using (var vAdmEntities = new ADMDatabase.ADMEntities()) 
    { 
     var blockEntities = from f in vAdmEntities.Form 
         where f.formId == formId 
         select f.Block; 
     if (blockEntities != null) 
     { 
      blocksList = new List<BlockContract>(blockEntities.Count()); 
      foreach (ADMDatabase.Block b in blockEntities) 
      { 
       BlockContract blockContract = new BlockContract 
       { 
        blockId = b.blockId, 
        name = b.name, 
        orderInForm = b.orderInForm 
       }; 
       blocksList.Add(blockContract); 
      } 
     } 
    } 

    return blocksList; 
} 

, foreach (ADMDatabase.Block b in blockEntities), 나는 오류 얻을 :

Cannot convert type 'System.Data.Objects.DataClasses.EntityCollection<ADMDatabase.Block>' to 'ADMDatabase.Block' 

가 어떻게이 오류를 해결할 수 있습니까?

+0

당신은 blockEntities.Select (b => 새로운 BlockContract {})를 사용할 수 있음을 알고 있습니다 .ToList()를 사용하여 목록을 만듭니다. –

+0

감사합니다. 나중에 다시 시도해보고 알려 드리겠습니다. – VansFannel

답변

2

루프를 변경해야합니다.

foreach (var blockItems in blockEntities){ 
    foreach (ADMDatabase.Block b in blockItems) 
      { 
       BlockContract blockContract = new BlockContract 
       { 
        blockId = b.blockId, 
        name = b.name, 
        orderInForm = b.orderInForm 
       }; 
       blocksList.Add(blockContract); 
      } 
} 

다음으로 차단을 선택합니다.

var blockEntities = from f in vAdmEntities.Form 
         where f.formId == formId 
         select f.Block; 

여기서 blockEntities를 디버깅하면 Form.Block이 차단 항목 목록이므로 목록 목록과 비슷합니다.