2012-02-21 21 views
2

この私のリポジトリ内の私の方法:LINQ:このLINQクエリでエラーが発生するのはなぜですか?

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(); 

    } 

これは誤りである:このエラーの解決策である

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

何?事前に

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() { (...) }に置き換える必要があります。質問クラスのプロパティに応じて、選択構文をチェックする必要があります。

例えば、あなたはNameを持っている場合は、TextSubjectプロパティがあり、このようになります。

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

の使用可能なパブリックコンストラクタをご提示くださいあなたの言ったこと: 'System.Collections.IEnumerable'を実装していないので、コレクションの初期化子で 'NKI3.Models.Question'型を初期化できません – Obsivus

+0

Questionクラスのプロパティに 'Core.Cname'、' Question.QuestionText'と 'Subject.Sname'の値を割り当てるべきです。 – MarcinJuraszek

+0

Questionクラスに含まれるプロパティを教えてください。 – MarcinJuraszek

1

あなたの方法は、あなたのQuestion型のコレクションを返すように期待しているが、あなたのLINQクエリはanonymous typeのシーケンスを返しています。あなたの投影を変更するたとえば、あなたのクエリを変更する必要があります。これは、クエリの結果から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(); 

    }            
関連する問題