繁体   English   中英

LinQ中具有连接/关系的匿名对象

[英]Anonymous object in LinQ with join/relations

我对MVC和实体框架还很陌生。 我创建了一个基于实体的模型。 视图正在使用新模型。 用查询填充模型:

public IEnumerable<TimeTableInsertModel> getTimeTableDetails(int? id)
{
    using (var db = new EFDbContext())
    {
        return (from s in db.TimeTables

                where s.TimeTableId == id
                select new
                {
                    TimeTableId = s.TimeTableId,
                    MovieId = s.MovieId,
                    RoomId = s.RoomId,
                    SeatsAvaible = s.SeatsAvaible,
                    StartTime = s.StartTime,
                    EndTime = s.EndTime,
                    Movie = s.Movie,
                    Reservations = s.Reservations,
                    Room = s.Room,

                    TicketQuantity = 0,
                }).ToList().Select(x => new TimeTableInsertModel
                {
                    TimeTableId = x.TimeTableId,
                    MovieId = x.MovieId,
                    RoomId = x.RoomId,
                    SeatsAvaible = x.SeatsAvaible,
                    StartTime = x.StartTime,
                    EndTime = x.EndTime,
                    Movie = x.Movie,
                    Reservations = x.Reservations,
                    Room = x.Room,
                });
    }
}

很好 但是:表“电影”与“类型”和“语言”有2个关系。 这两个表未填写在模型中。 而且我不知道该怎么做。 我已经尝试过这种方式:

Language = s.Movie.Language,
Reservations = s.Reservations,

Genre = x.Movie.Genre,
Language = x.Movie.Language,

但是Visual Studio表示该模型不包含“流派”和“语言”的定义。

有人可以帮忙吗? 原始模型“ TimeTableModel”具有以下内容:

public partial class TimeTable
{
    public TimeTable()
    {
        Reservations = new HashSet<Reservation>();
    }

    public int TimeTableId { get; set; }
    public int MovieId { get; set; }
    public int RoomId { get; set; }
    public int SeatsAvaible { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
    public virtual Movie Movie { get; set; }
    public virtual ICollection<Reservation> Reservations { get; set; }
    public virtual Room Room { get; set; }
}

还有TimeTableInsertModel(视图使用了女巫):

public class TimeTableInsertModel
{
    [Key]
    public int TimeTableId { get; set; }
    public int MovieId { get; set; }
    public int RoomId { get; set; }
    public int SeatsAvaible { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
    public virtual Movie Movie { get; set; }
    public virtual ICollection<Reservation> Reservations { get; set; }
    public virtual Room Room { get; set; }
    public int TicketQuantity { get; set; }
}

您的孩子是虚拟的,因此您需要告诉EF加载它们。 有几种类似的技术:

from s in db.TimeTables.Include("Movie.Genre").Include("Movie.Language")

这将导致电影及其类型和语言儿童的加载。

https://msdn.microsoft.com/zh-CN/data/jj574232.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM