C# LINQ group by查询帮助:使用键选择另一个相关表
请帮助我完成以下查询:C# LINQ group by查询帮助:使用键选择另一个相关表,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,请帮助我完成以下查询: var results = from species in db.Species join cats in db.Categories on species.CategoryId equals cats.CategoryId join groups in db.Groups on cats.GroupId equals groups.GroupId group groups by grou
var results = from species in db.Species
join cats in db.Categories on species.CategoryId equals cats.CategoryId
join groups in db.Groups on cats.GroupId equals groups.GroupId
group groups by groups into g
select new GroupWithCategoryChildren
{
Group = g.Key,
Categories = (cats from above query for this same g.Key group)???
};
我可以用SQL很容易地做到这一点,但我在用LINQ。最后,我想列出每个组
以及在上面的/main单个查询中加入的cats
,理想情况下不需要在单独的查询中再次查询该数据
非常感谢我不确定我是否理解正确,但我认为这就是您所需要的:而不是
按组分组
执行按组分组猫
,然后键将是组
,组的值将是所有匹配的类别
var results = from species in db.Species
join cats in db.Categories on species.CategoryId equals cats.CategoryId
join groups in db.Groups on cats.GroupId equals groups.GroupId
group cats by groups into g
select new GroupWithCategoryChildren
{
Group = g.Key,
Categories = g.ToList()
};
我用这个来测试它:
List<dynamic> Species = new List<dynamic>()
{
new { A = "1", CategoryId = 1 },
new { A = "2", CategoryId = 2 },
};
List<dynamic> Categories = new List<dynamic>
{
new { B = "1", CategoryId = 1, GroupId = 1 },
new { B = "2", CategoryId = 2, GroupId = 1 },
};
List<dynamic> Groups = new List<dynamic>
{
new { C = "1", GroupId = 1 }
};
//result: { Group: { C = "1", GroupId = 1 }, Categories (1,2)}
List Species=新列表()
{
新的{A=“1”,类别ID=1},
新的{A=“2”,类别ID=2},
};
列表类别=新列表
{
新的{B=“1”,CategoryId=1,GroupId=1},
新的{B=“2”,CategoryId=2,GroupId=1},
};
列表组=新列表
{
新的{C=“1”,GroupId=1}
};
//结果:{Group:{C=“1”,GroupId=1},Categories(1,2)}
您可以发布您将如何在SQL中执行此操作吗?这将告诉我们您需要什么,LINQ专家可以很容易地为您翻译。您可以在LINQ中使用子查询,但正如Shannon提到的,如果看不到您的SQL或所有这些表如何相互关联,就无法回答您的问题。抱歉,各位,我意识到我没有在原来的问题中提供最好的解释。嗨,吉拉德,非常感谢。是的,这正是我需要的。我最终实现了一个稍微不同的版本(因为我还需要进一步深入第二层),但它正是基于上面所示的示例解决方案。非常感谢你的帮助。