一对多,一个视图我需要一个自定义模型吗?

时间:2012-05-01 07:08:41

标签: asp.net-mvc-3 linq

我有一个数据库基础第一个应用程序,所以我没有这样的自制模态,只是自动创建的模式。我想在单个视图中显示html表/列表中单行选择中的一个和多个部分,这里是在重新创建的MS Access查询中工作得很好的SQL, - 一些括号:

SELECT Facilitiy.FacilityName, Facilitiy.FacilityImage, FacilityDetail.FacilityDetailDescription
FROM FacilityDetail INNER JOIN Facilitiy ON FacilityDetail.FacilityDetailID = Facilitiy.FacilityFK
WHERE FacilityFK = id

LINQ给了我正确的许多部分:

from fd in db.FacilityDetails
join f in db.Facilities on fd.FacilityID equals f.FacilityFK
where f.B FacilityFK == id
select f

我有点希望能像SQL那样做,但我需要创建一个我可以放在视图中显示的模态:

FacilityImage(一面)| FacilityName(一面)| FacilityDetailDescription(多方)

我听说我可以通过做这样的事情来做到这一点???

from fd in db.FacilityDetails.Include("Facilities")

但似乎没有任何区别!

这让我相信我需要创建一个新的自定义模型?如果是这样我怎么写呢?

我试过这样的事情,但是我无法让它发挥作用。

public class FacilitiyDetails
{
    public string FacilitiesDescription { get; set; }
    public string FacilitiesImage { get; set; }
    public string BeachFacilitiesDescription { get; set; }
{

我不太清楚我应该在这做什么!

1 个答案:

答案 0 :(得分:0)

是的,您需要一个自定义模型,因为您想要显示多种类型。你需要有类似的东西:

public class FacilityModel
{
    public Facility Facility { get; set; }
    public List<FacilityDetails> FacilityDetails { get; set; }
}

基于您上面的课程并假设您已经拥有Facility课程。然后,您需要更改LINQ以首先获取设施详细信息:

var facility = (from f in db.Facilities
                 where f.FacilityID == id
                 select f)
               .FirstOrDefault(); //just being safe here, 
                                  //if it's null, you'll want to escape out of
                                  //the code below

然后,你需要通过以下方式获得该设施的所有等效FacilityDetails

var facilityDetails = (from fd in db.FacilityDetails
                      where fd.FacilityFK == id
                      select fd).ToList()

然后,您可以通过执行以下操作来创建模型的新实例:

var model = new FacilityModel
            {
                Facility = facility,
                FacilityDetails = facilityDetails
            };