linq:祖父母-父母-子女查询

linq:祖父母-父母-子女查询,linq,entity-framework,Linq,Entity Framework,我有一个实体模型,我一直在寻找编写一个linq查询,返回每个祖父母的子女和父母计数 我需要输出3列:祖父母姓名|子女数|孙辈数 protected void Page_Load(object sender, EventArgs e) { using (FamilyModel.TheConn myEntities = new FamilyModel.TheConn()) { int TheUserID = 13; // will change later

我有一个实体模型,我一直在寻找编写一个linq查询,返回每个祖父母的子女和父母计数

我需要输出3列:祖父母姓名|子女数|孙辈数

protected void Page_Load(object sender, EventArgs e)
{
     using (FamilyModel.TheConn myEntities = new FamilyModel.TheConn())
     {
          int TheUserID = 13; // will change later

          var myOutput = from gparents in myEntities.GrandParents
                     where gparents.UserID == TheUserID
                     select gparent.Name, // here's what's missing: the counts

          GridView1.DataSource = myOutput;
          GridView1.DataBind();

     }
}
我一直在与SelectMany、Groupby、joins等竞争。。。。我只是没有得到这个看似简单的查询所需要的结果。 如有任何意见,将不胜感激

谢谢

这是假设您的
子实体
具有导航属性
孙辈
(实际上,
子实体
世界在这里更有意义-子实体的子实体=孙辈)

在本例中,我们将投影到一个
祖父母视图模型上

public class GrandParentViewModel
{
    public string Name { get; set; }
    public int ChildrenCount { get; set; }
    public int GrandChildrenCount { get; set; }
}
这是假设您的
子实体
具有导航属性
孙辈
(实际上,
子实体
世界在这里更有意义-子实体的子实体=孙辈)

在本例中,我们将投影到一个
祖父母视图模型上

public class GrandParentViewModel
{
    public string Name { get; set; }
    public int ChildrenCount { get; set; }
    public int GrandChildrenCount { get; set; }
}

我认为关于模式的更多信息会有所帮助我认为关于模式的更多信息会有所帮助结果出乎意料:1)名称显示“it”(Intellisense不显示字段GparentName),2)列显示数据库中相同的子代和子代总数,共有6行显示(每格兰普伦特一行)。它应该显示每个祖父母的姓名和计数,而不是整个子女和孙子孙女的总数。这很奇怪。代码中有一些拼写错误-我将它们编辑掉了。应该以“from gparents”而不是“from gparents”开头。您以前是否碰巧定义了变量
gparents
e> myOutput变量是一个查询-如果您想要一个祖父母(用户ID为
的祖父母)的结果,您需要调用
myOutput.FirstOrDefault()
。如果您想要检索祖父母列表,请调用
myOutput.ToList()
。哦,我的天啊,这很管用!!!!!非常感谢你。自从我刚到linq以来,在过去的三天里,我一直在努力解决这几行代码。你的答案将在网上保留一段时间,因为它真的解决了一个问题,我相信很多人都在努力解决这个问题,直到他们解决为止。非常感谢你!!很高兴我能提供帮助。祝你好运!我的结果是s意外:1)名称显示“it”(Intellisense不显示字段GparentName),2)列显示数据库中相同的子代和孙子代总数,共有6行显示(每个孙子代1行)。它应该显示每个祖父母的姓名和数量,而不是子女和孙辈的总数。这很奇怪。代码中有一些拼写错误——我把它们删掉了。应该以“from gparents”而不是“from gparents”开头。您以前是否碰巧定义了变量
gparent
?其次,
myOutput
变量是一个查询-如果您想要一个祖父母(具有
userid
的祖父母)的结果,您需要调用
myOutput.FirstOrDefault()
。如果您想检索祖父母的列表,请调用
myOutput.ToList()
。哦,天哪,它起作用了!!!!!非常感谢你。自从我刚接触linq以来,我在过去的3天里一直在努力处理这几行代码。你的答案会在网上保留一段时间,因为它确实解决了一个问题,我相信很多人都在苦苦挣扎,直到他们找到答案。非常感谢你!!很高兴我能帮忙。祝你好运