Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 EF如何反转对象层次结构_Asp.net Mvc 3_Entity Framework - Fatal编程技术网

Asp.net mvc 3 EF如何反转对象层次结构

Asp.net mvc 3 EF如何反转对象层次结构,asp.net-mvc-3,entity-framework,Asp.net Mvc 3,Entity Framework,我有一个家庭中的用户列表var foo=someUser.MyFamily() 每个用户都有一个类列表公共虚拟列表类{get;set;} 每个类都有一个日期列表公共虚拟列表日期{get;set;} 要显示家庭本周的节目,我想创建一个表 date class people... class people... date+ class people 最终能够说 foreach (var d in foo) { use d.Date

我有一个家庭中的用户列表
var foo=someUser.MyFamily()
每个用户都有一个类列表
公共虚拟列表类{get;set;}

每个类都有一个日期列表
公共虚拟列表日期{get;set;}

要显示家庭本周的节目,我想创建一个表

date class people... class people... date+ class people 最终能够说

foreach (var d in foo)
{
    use d.Date
    foreach (var c in d.Classes)
    {
        use c.Class.ClassTime, c.Class.ClassName
        foreach (var u in c.Users)
        {
            use u.FirstName

谢谢你的洞察力

我明白了

多亏了这篇文章,我学会了如何使用SelectMany扁平化层次结构

一旦我将其展平,就可以直接使用
GroupBy()
从日期->会议->用户重建对象层次结构,从而
每个日期都有一个会议列表
每个会议都有一个用户列表

var meetingDates = Model.User.MyFamily(true)
    .SelectMany(x => x.ClassesIamIn)
    .SelectMany(x => x.Class.ClassMeetings, (c, d) => new { Date = d.Date, Meeting = d, c.User })
    .GroupBy(x => x.Date)
    .Select(x => new
    {
        Date = x.Key,
        Meetings = x.Select(y => new { Meeting = y.Meeting, User = y.User })
            .GroupBy(a => a.Meeting)
            .Select(a => new
            {
                Meeting = a.Key,
                Users = a.Select(b => b.User)
                    .OrderBy(d => d.FirstName)
            })
            .OrderBy(c => c.Meeting.TimeStart.TimeOfDay)
    });

哇,这是一场斗争;哇,真是松了一口气。上述文章是关键。我已经知道如何使用SelectMany()在列表内部进行钻取。我不知道的是愚蠢的lambda语法,用于创建一个包含父对象的对象
(parent,child)=>新的{parent-child-mix}

Eric如果有多对多(用户族除外),你可以有这种类型的“思考”——近似于一对多(模型)。如果你有m-2-m,那么最简单的方法就是修改你的实体模型,以使关系朝相反的方向发展。然后,您可以使用“本机”linq查询,而无需任何努力。如果您可以更改model@NSGaga我明白你的意思,事实上,在目前的模式下这是可能的。ClassTime->Class->UsersInClass可以工作,但它给了我一个包含所有用户的所有类的所有会议的巨大结果集。不知何故,我不得不加入到家庭成员名单中。我想不出该怎么做。无论如何,从家庭成员开始加入似乎会更快。
var meetingDates = Model.User.MyFamily(true)
    .SelectMany(x => x.ClassesIamIn)
    .SelectMany(x => x.Class.ClassMeetings, (c, d) => new { Date = d.Date, Meeting = d, c.User })
    .GroupBy(x => x.Date)
    .Select(x => new
    {
        Date = x.Key,
        Meetings = x.Select(y => new { Meeting = y.Meeting, User = y.User })
            .GroupBy(a => a.Meeting)
            .Select(a => new
            {
                Meeting = a.Key,
                Users = a.Select(b => b.User)
                    .OrderBy(d => d.FirstName)
            })
            .OrderBy(c => c.Meeting.TimeStart.TimeOfDay)
    });