【发布时间】:2014-03-09 15:40:24
【问题描述】:
我开始使用 MVC5 并有一个模型结构如下:
我需要用所有数据填充机制模型,即机制、地址、国家名称、操作时间范围,而不是 dayid。
Linq 可以做到这一点吗?如果是这样,我已经尝试了很多方法,但始终无法在结果中获得国家名称或日期。
我在类语句下包含了一些失败的 linq 尝试。
public class Mechanic
{
public Int32 ID { get; set; }
public String CompanyName { get; set; }
public DateTime CreationTimestamp { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public virtual ICollection<MechanicService> MechanicServices { get; set; }
public virtual ICollection<MechanicOperationalTimeFrame> MechanicOperationalTimeFrames { get; set; }
}
public class Address
{
public Int32 ID { get; set; }
public int MechanicId { get; set; }
public String AddressLine1 { get; set; }
public String AddressLine2 { get; set; }
public String AddressLine3 { get; set; }
public String District { get; set; }
public String Region { get; set; }
public String PostalCode { get; set; }
public int CountryId { get; set; }
public DateTime CreationTimestamp { get; set; }
public virtual Mechanic Mechanic { get; set; }
public virtual Country Country { get; set; }
}
public class Country
{
public int ID { get; set; }
public String CountryName { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
public class MechanicOperationalTimeFrame
{
public Int32 ID { get; set; }
public Int32 DayId { get; set; }
public String Opening { get; set; }
public String Closing { get; set; }
public Int32 MechanicId { get; set; }
public virtual Mechanic Mechanic { get; set; }
public virtual Day Day { get; set; }
}
public class Day
{
public Int32 ID { get; set; }
public String Name { get; set; }
public virtual ICollection<MechanicOperationalTimeFrame> MechanicOperationalTimeFrames { get; set; }
}
public class MechanicService
{
public Int32 ID { get; set; }
[StringLength(30), DisplayName("Service provided")]
public String Service { get; set; }
public Int32 MechanicId { get; set; }
public virtual Mechanic Mechanic { get; set; }
}
以下是我的一些失败尝试:
//var mechanic = from m in db.Mechanics
// join a in db.Addresses on m.ID equals a.MechanicId
// join ms in db.MechanicServices on m.ID equals ms.MechanicId into services
// from y in services.DefaultIfEmpty()
// join mo in db.MechanicOperationalTimeFrames on m.ID equals mo.MechanicId into hours
// from h in hours.DefaultIfEmpty()
// select new { m.CompanyName, y.Service, h.DayId };
//Mechanic mechanic = (Mechanic)db.Mechanics
.Where(a => a.ID == id)
.Include(a => a.Addresses)
.Include(a => a.MechanicServices)
.Include(a => a.MechanicOperationalTimeFrames).SingleOrDefault();
//Mechanic mechanic = db.Mechanics.Where(m => m.ID == id)
// .Include("Addresses")
// .Include("MechanicServices")
// .Include("MechanicOperationalTimeFrames").Single();
这是数据库的快照。
非常感谢任何帮助或指示。
【问题讨论】:
-
如果您检索 Mechanics,并将其传递给视图,您应该可以访问所有虚拟属性?
标签: sql asp.net-mvc linq model asp.net-mvc-5