Вы передаете список анонимных объектов для просмотра:
select new { Email = x.ParentEmail, UserName = y.Username }
Пока ожидание вида IEnumerable<ETMS.Models.DB.tblParent>
:
@model IEnumerable<ETMS.Models.DB.tblParent>
Вы должны изменить свой выбор на:
select y
чтобы код работал.
Обновление
Вот как вы могли бы использовать шаблон модели представления. Сначала создайте класс модели представления, чтобы вы не передавали анонимный тип вашему представлению. Давайте назовем это AwesomeEmailViewModel
, и похоже, что вам нужны .Email
, .Username
и некоторые другие свойства, поэтому мы также настроим их.
public class AwesomeEmailViewModel
{
public string Email { get; set; }
public string Username { get; set; }
public string FirstName{ get; set; }
public string LastName { get; set; }
public int Location_ID{ get; set; }
public DateTime CreateTime { get; set; }
}
Теперь измените ваш запрос, используя инициализацию объекта, чтобы заполнить экземпляр AwesomeEmailViewModel
Примечание: я угадываю какие свойства принадлежат каким объектам (или tblParent, или tblParentEmails, поэтому вам нужно будет дважды проверить эти
var members = (from x in db.tblParentEmails
join y in db.tblParents
on x.Parent_ID equals y.Parent_ID
select new AwesomeEmailViewModel()
{
Email = x.ParentEmail,
UserName = y.Username,
FirstName = y.FirstName,
LastName = y.LastName,
Location_ID = x.Location_ID,
CreateTime = y.CreateTime,
}).ToList();
// I don't know if you'll need the `AsEnumerable()` call
return View(members);
Наконец, ваше представление должно знать, какой тип (ы) ожидать, поэтому давайте изменим его, чтобы он ожидал список наших недавно созданных экземпляров AwesomeEmailViewModel.
@model IEnumerable<ETMS.Models.AwesomeEmailViewModel>
Обратите пристальное внимание, как я уже догадался, в пространстве имен. В любом случае, это должно дать вам доступ к нужным вам свойствам в вашем представлении. Если вам нужно больше, вам нужно изменить новый класс модели представления, который мы создали, а также запрос в действии вашего контроллера.