如何在ASP.NET MVC中处理分层查询

时间:2014-02-16 13:27:57

标签: c# asp.net asp.net-mvc entity-framework

如何在ASP.NET MVC中处理分层查询及其数据显示?

假设我有一些模型,看起来像这样: (附加属性)

public class Parent {
    public int ParentId {get; set;}
    public virtual ICollection<ChildLvlOne> ChildsLvl1 {get; set;}
}

public class ChildLvlOne {
    public int ChildLvlOneId {get; set;}
    public virtual Parent Parent {get; set;}
    public virtual ICollection<ChildLvlTwo> ChildsLvl2 {get; set;}
}

public class ChildLvlTwo {
    public int ChildLvlTwoId {get; set;}
    public ChildLvlOne ChildLvlOne {get; set;}
    public virtual ICollection<SomeOtherObject> SomeOtherObjects {get; set;} 
}

现在我想显示来自 Parent 的数据以及来自两个级别的子项的数据,但来自 ChildLvlTwo 的数据必须以不同的方式显示,具体取决于它相关的 SomeOtherObjects

所以,我的第一个想法是,为 ChildLvlTwo 创建一个新的ViewModel并在那里添加一个属性,它决定了它必须显示的方式。 但要做到这一点,我还必须为 ChildLvlOne Parent 创建一个新的ViewModel,并在查询中创建一个非常庞大的select语句。

对于这样的问题有没有好的解决方案?

1 个答案:

答案 0 :(得分:0)

我想你想要如何显示孩子们的数据很重要。这样的事情会起作用吗?

from p in Parent
select new
{
    Parent = p,
    Child =  
    {
        ChildLvl1.ChildsLvl2.Select(l2 => ChildLv2.ChildLvlTwoId).ToList().Contains(1)  ? "Format1" :
        ChildLvl1.ChildsLvl2.Select(l2 => ChildLv2.ChildLvlTwoId).ToList().Contains(2) ? "Format2" :
        ChildLvl1.ChildsLvl2.Select(l2 => ChildLv2.ChildLvlTwoId).ToList().Contains(3) ? "Format3" : "Format4"
    }
};