2013-03-29 4 views
0

Im gettin이 오류가 있지만 그게 뭔지 모르겠습니다. 나는 대답을 찾았지만 아무도 메인에 대답하거나 뭔가를 놓친 것일 수도있다. 여기에 내 코드 :'object'에 'type'에 대한 정의가 포함되어 있지 않습니다.

Connection db = new Connection(); 

     public ActionResult Index() 
     { 

      ViewBag.query = from input in db.field 
          where input.ID_FIELD == 1 
          select new { 
           type = input.FIELD_TYPE 
          }; 


      return View(); 
     } 

하고 뷰 측

@foreach (var item in ViewBag.query) 
     { 
       @item.type//error here: 'object' does not contain a definition for 'type', why??? 
     } 

그리고 난 간단한 선택 할 경우 where 절, 작업 확인 공공 ActionResult 지수() {

  ViewBag.query = from input in db.field 
          where input.ID_FIELD == 1 
          select input.FIELD_TYPE; 


      return View(); 
     } 

내 문제가 뭐지? 나는 똑같은 일을하는 많은 자질구레 한 사람들처럼 보이고, 지금 막 한 것처럼 위대한 작품이다. int [] number = {1, 2, 3, 4, 5};

  var query = from num in number 
         let x = num + num + num 
         select new {avg = x}; 

       foreach (var item in query) 
      { 
       Console.WriteLine(item.avg); 

      } 

모든 것이 여기에 있습니다. 왜 문제가 될 수 있을까 ??

+0

는'ViewBag.query'이 FIELD_TYPE''의 목록입니다 : 그래서, 당신은 단지보다는 전체 쿼리를 ViewBag 속성에 값 컬렉션을 저장할 수 ='FIELD_TYPE'이고'type'이라는 속성을 가지고 있지 않습니다. 당신은 단지 @item을 할 필요가 있고 그것은 여러분이 필요로하는 값입니다. –

+0

이 방법이 효과가 있지만 {type = Text}라고 출력됩니다. 왜? –

+1

값을 인쇄하지 않고 '유형'을 인쇄하기 때문에. 방금 새로운 답변을 게시했습니다. P.Brian의 답변을 보면 올바른 방향으로 나아갈 것입니다. –

답변

3

메서드에서 익명 형식을 반환 할 수 없습니다. 대신 새로운 유형을 작성하고 해당 유형을 리턴하십시오. 예를 들어

:

ViewBag.query = from input in db.field 
          where input.ID_FIELD == 1 
          select new MyType() { 
           someField = input.FIELD_TYPE 
          }; 

public class MyType 
{ 
    public int someField {get;set;}//compatible with whatever type FIELD_TYPE is. 
} 
+0

다른 방법으로 다른 클래스를 만들 필요가 없습니다. Btw, 정말 잘됐다 !! –

+0

@ user2195741 - 컴파일러에서 생성 된 형식에 사용자가 액세스 할 수 없습니다. 이런 이유로 유형을 반환 할 때 목표를 달성하는 다른 방법이 있다고 생각하지 않습니다. 그러나 거의 항상 고양이를 스킨하는 방법은 여러 가지가 있으므로 다른 것들이 가능하다는 것을 알게되지 않을 것입니다 (아마 다이내믹을 영리하게 사용하는 것일 수도 있습니다). 이것이 내가이 상황에서하는 일입니다. –

0

마지막 예에서는 'item.type'을 사용하지 않습니다. 그 외에도 System.Object에는 'type'속성이 없습니다. 그래도 'GetType()'을 사용할 수 있습니다.
참조를 위해 here을 참조하십시오.

0

문제는 ViewBag가 dynamic이지만 그 안에 저장하고익명 객체가 아니기 때문에 컴파일러가 직접 속성에 액세스 할 수 없다는 것입니다. `item`을

Connection db = new Connection(); 
public ActionResult Index() 
{ 

    ViewBag.types = from input in db.field 
        where input.ID_FIELD == 1 
        select input.FIELD_TYPE; 

    return View(); 
} 

다음

@foreach (var type in ViewBag.types) 
{ 
    @type 
} 
관련 문제