gpt4 book ai didi

c# - Group By + Select 进入新的嵌套类结构

转载 作者:行者123 更新时间:2023-11-30 21:45:52 25 4
gpt4 key购买 nike

+----+---------+--------+
| id | animal | type |
+----+---------+--------+
| 0 | dog | TypeA |
| 1 | cat | TypeA |
| 2 | dog | TypeB |
| 3 | cat | TypeB |
+----+---------+--------+

显然我想做的是在 EF 中使用 GroupBy,它有点像这样:

  • dbAnimal.GroupBy(x => x.animal);

但是如果我想进一步将数据映射到下面的类结构中呢?

public class Animal
{
public Animal()
{
this.animalType = new List<Type>();
}

public string animalDesc { get; set; }
public List<Type> animalType { get; set; }

public class Type
{
public string typeDesc { get; set; }
}
}

JSON 格式示例:

[
{
"animalDesc": "dog",
"animalType":
[
{
"typeDesc": "TypeA",
},
{
"typeDesc": "TypeB",
}
]
},
{
"animalDesc": "cat",
"animalType":
[
{
"typeDesc": "TypeA",
},
{
"typeDesc": "TypeB",
}
]
}
]

我的问题是如何在 EF 中使用 GroupBy 后实现到类模型的映射。

也欢迎使用其他解决方法。谢谢。

最佳答案

给定代表您的数据库表映射的类

public class DatabaseAnimal {
public int id { get; set; }
public string animal { get; set; }
public string type { get; set; }
}

还有这些类来代表你要做的投影

public class Animal {
public Animal() {
animalType = new List<AnimalType>();
}

public string animalDesc { get; set; }
public List<AnimalType> animalType { get; set; }
}

public class AnimalType {
public string typeDesc { get; set; }
}

您可以将您的组投影(使用Select)到您的模型中

var result = dbAnimal.GroupBy(a => a.animal)
.Select(grp => new Animal {
animalDesc = grp.Key,
animalType = grp.Select(e => new AnimalType {
typeDesc = e.type
}).ToList()
});

.NET Fiddle

此外,我强烈建议您采用 C# Capitalization Convention作为您类(class)中的命名约定。

关于c# - Group By + Select 进入新的嵌套类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39790576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com