2012-02-21 2 views
2

내 저장소에이 내 방법LINQ :이 LINQ 쿼리에서 오류가 발생하는 이유는 무엇입니까?

Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' to 'NKI3.Models.Question' 

이 오류에 대한 해결책은 무엇인가 :

public List<Question> getallquestion() 
    { 
     var hej = from Core in db.CoreValue 
        join Question in db.Question on Core.CID equals question.QID 
        join Subject in db.SubjectType on Core.CID equals Subject.SID 
        select new 
        { 
         Core.Cname, 
         Question.QuestionText, 
         Subject.Sname 
        }; 

     return hej.ToList(); 

    } 

이 오류인가? 사전에

public class CreateViewModel 
    { 
     public string QuestionText { get; set; } 
     public string Sname { get; set; } 
     public string Cname {get;set;} 

    } 
} 

감사 : 나는 그것을

내 CreateViewModel을 찾을 수가 캔트!

최고 감사합니다.

+0

내가 그것을 변경 할 때 지금은 다른 오류를받은 위 코드는'question' 클래스 – sll

답변

1
지금처럼 읽을 수 있도록 선택을 변경

:

public List<CreateViewModel> GetAllQuestionViewModel() 
    { 
     var hej = from Core in db.CoreValue 
        join Question in db.Question on Core.CID equals question.QID 
        join Subject in db.SubjectType on Core.CID equals Subject.SID 
        select new CreateViewModel 
        { 
         Cname = Core.Cname, 
         QuestionText = Question.QuestionText, 
         Sname = Subject.Sname 
        }; 

     return hej.ToList(); 

    } 

컨트롤러에서이 같은 일을 할 것입니다 :

public ActionResult Index() { 
    IEnumerable<CreateViewModel> questions = someContext.GetAllQuestionViewModel(); 
    return View(questions); 
} 
+0

NKI3.Models이란 무엇입니까? –

+0

'Question' 엔티티의'Namespace'라고 추측하고있었습니다.클래스에 using 문이 이미있는 경우'new Question'을 사용할 수 있습니다. – Paul

+0

내 질문에는 2 개의 속성과 해당 QID 및 QuestionText 만 있습니다. Sname은 SubjectType 테이블에서 나오고 Cname은 CoreValue 테이블에서 나온 것입니다. – Obsivus

5

linq 쿼리는 익명 개체 목록을 생성합니다 (형식없이 select new { (...) }을 사용하는 경우). select new Question() { (...) }으로 바꿔야합니다. Question 클래스 속성에 따라 선택 구문을 확인해야합니다.

예 :

var hej = from c in db.CoreValue 
       join q in db.Question on c.CID equals q.QID 
       join s in db.SubjectType on c.CID equals s.SID 
       select new Question 
       { 
        QID = q.QID, 
        QuestionText = q.QuestionText 
       }; 
+0

의 가능한 public 생성자를 보여주십시오 사용 당신이 말한 : 'System.Collections.IEnumerable'을 구현하지 않기 때문에 'NKI3.Models.Question'형식을 초기화 할 수 없습니다. – Obsivus

+0

Question 클래스 속성에'Core.Cname','Question.QuestionText' 및'Subject.Sname' 값을 할당해야합니다. – MarcinJuraszek

+0

Question 클래스에 어떤 속성이 포함되어 있는지 알려주실 수 있습니까? – MarcinJuraszek

1

귀하의 방법은 당신의 Question 형식의 컬렉션을 반환하는 기대하지만 LINQ 쿼리는 anonymous type의 순서를 반환 : 당신이있을 때 Name, TextSubject 속성은 다음과 같아야합니다. 당신은 당신의 투사을 변경 예를 들어, 쿼리를 변경해야합니다 :이 쿼리의 결과에서 Question 유형의 속성 값을 할당하는 object initializer을 사용

public List<Question> getallquestion() 
{ 
    var hej = from Core in db.CoreValue 
       join Question in db.Question on Core.CID equals question.QID 
       join Subject in db.SubjectType on Core.CID equals Subject.SID 
       select new Question 
       { 
        Name = Core.Cname, 
        Text = Question.QuestionText, 
        Subject = Subject.Sname 
       }; 

    return hej.ToList(); 
} 

. 귀하의 부동산 이름이 다를 것입니다.

0

당신은 익명의 유형을 반환 할 수 없습니다.


public class QuestionResult 
{ 
public string Core {get; set;} 
public string Question {get; set;} 
public string Subject{get; set;} 
} 

을하는 클래스를 만들고이를

public List<QuestionResult> getallquestion() 
    { 
     var hej = from Core in db.CoreValue 
        join Question in db.Question on Core.CID equals question.QID 
        join Subject in db.SubjectType on Core.CID equals Subject.SID 
        select new QuestionResult 
        { 
         Core = Core.Cname, 
         Question = Question.QuestionText, 
         Subject = Subject.Sname 
        }; 

     return hej.ToList(); 

    }            
관련 문제