Linq Queryable отсутствует актерский состав?

1

Я пытаюсь захватить данные из трех таблиц, однако я получаю сообщение об ошибке в заключительном заявлении о соединении, и я не уверен, почему.

Все DID работают нормально, когда у меня было одно имя select e.Name; но как только я добавил больше переменных, у этой проблемы возникла ошибка.

Невозможно неявно преобразовать тип "System.Linq.IQueryable" в "System.Linq.IQueryable". Явное преобразование существует (вам не хватает роли?)

public ActionResult EmployeeInfo()
        {
        var emp = db.Employees;
    var mov = db.Movies;
    var moveemp = db.MovieEmployees;

    IQueryable<string> query =
    from m in db.Movies

    join me in db.MovieEmployees 
    on m.ID equals me.movieID

    join e in db.Employees
    on me.employeeID equals e.ID



    // this join gives the error
    join r in db.Roles
    on me.roleID equals r.ID

    select new { e.Name, r.RoleType, e.Birthday, m.ID };

    return View(query.Distinct().ToList());
}

Спасибо!

Теги:
linq
asp.net-mvc

1 ответ

1
Лучший ответ

Вы определяете переменную query или введите IQueryable<string>. Но ваш запрос возвращает анонимные объекты (т. IQueryable<anonymous_type> Имеет тип IQueryable<anonymous_type>). Конечно, невозможно задать такой запрос для вашей переменной query. Создать тип модели просмотра:

public class EmployeeInfoViewModel
{
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
    public int ID { get; set; }
    // RoleType, etc
}

Используйте его как модель для вашего вида:

@model IEnumerable<EmployeeInfoViewModel>

и передать список этих моделей представлений в ваше представление (не забудьте использовать ключевое слово var при определении запроса - тип запроса будет выведен из определения запроса):

var query = ....
            select new { e.Name, r.RoleType, e.Birthday, m.ID };

var model = query.Distinct()
                 .Select(x => new EmployeeInfoViewModel {
                      Name = x.Name,
                      Birthday = x.Birthday,
                      ID = x.ID
                  }).ToList();

return View(model);
  • 0
    Почему это сработало до этого? Представление отображало все мои имена просто отлично на странице просмотра .. Я просто пытаюсь все ясно видеть. Я понимаю, что вы говорите, но это еще не «щелкнуло», так сказать. хаха спасибо до сих пор!
  • 0
    @ Первоначально ваш запрос был типа IQueryable<string> потому что вы выбрали одно строковое значение. Теперь тип запроса изменился, но вы все еще используете переменную query же типа.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню