LINQ: Почему я получаю ошибку в этом запросе LINQ? - PullRequest
2 голосов
/ 21 февраля 2012

Это мой метод в моем хранилище:

    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'

Каково решение этой ошибки? Я не могу найти его

Моя CreateViewModel:

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

    }
}

Заранее спасибо!

С наилучшими пожеланиями!

Ответы [ 4 ]

5 голосов
/ 21 февраля 2012

Ваш запрос linq создает список анонимных объектов (так как вы используете select new { (...) } без какого-либо типа).Вы должны заменить его на select new Question() { (...) }.Вы должны проверить этот синтаксис выбора в зависимости от свойств класса Question.

например.Если у вас есть свойства Name, Text и Subject, они должны выглядеть следующим образом:

    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
                };
1 голос
/ 21 февраля 2012

Измените ваш выбор следующим образом:

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);
}
1 голос
/ 21 февраля 2012

Ваш метод ожидает возврата коллекции вашего типа Question, но ваш запрос 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 Question
                {
                    Name = Core.Cname,
                    Text = Question.QuestionText,
                    Subject = Subject.Sname
                };

    return hej.ToList();
}

При этом используется инициализатор объекта для назначения значений свойств типа Question из результата запроса,Ваши имена собственности будут отличаться.

0 голосов
/ 21 февраля 2012

Вы не можете вернуть анонимный тип.


Создать класс

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

    }                                            
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...