可能措辞不太正确,但这是我所拥有的,这是我想要实现的结果:
class Cake
{
public List<string> Ingrediants {get;set;}
public DateTime Baked {get;set;}
public string CakeName {get;set;}
}
List<Cake> cakes= new List<Cake>();
cakes.Add(new Cake() {CakeName = "Cake1", Ingrediants = new List<string>() {"Sugar", "Chocolate"}});
cakes.Add(new Cake() {CakeName = "Cake2", Ingrediants = new List<string>() {"Sugar", "Butter"}});
cakes.Add(new Cake() {CakeName = "Cake3", Ingrediants = new List<string>() {"Stevia", "Butter"}});
我想按成分对蛋糕进行分组。所以我想结束这个:
- Sugar
Cake1
Cake2
- Stevia
Cake3
- Chocolate
Cake1
- Butter
Cake2
Cake3
提前致谢!
最佳答案
如果您不介意查询理解,这里有一个替代方案(注意更正的拼写):
IEnumerable<IGrouping<string,Cake>> query =
from cake in cakes
from ingredient in cake.Ingredients
group cake by ingredient;
惊喜!这是一个有效的查询!语言规范允许理解以分组结束。 IGrouping<string,Cake>
技术上是 IEnumerable<Cake>
有一个Key
类型属性 string
- 在这种情况下是成分。编译器会将其转换为与其他答案几乎相同的代码。
我们可以通过引入 into
来更改查询以生成与其他答案相似的相同泛型类型。和一个 select
查询继续的子句:
var query =
from cake in cakes
from ingredient in cake.Ingredients
group cake by ingredient into cakesGrouped
select new { Ingredient = cakesGrouped.Key,
Cakes = cakesGrouped.ToList() };
恕我直言,流式语法和查询语法都值得了解。干杯!
关于c# - 使用 Linq,如何对目标对象中的列表中的对象进行 GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572718/