gpt4 book ai didi

c# - 如何使用 List.Distinct 来填充自定义类?

转载 作者:行者123 更新时间:2023-11-29 07:22:49 24 4
gpt4 key购买 nike

我有以下两个类(在 C# 中)

public class courseList 
{
public string MajorName { get; set; }
public string MajorNameID { get; set; }
public string CourseID { get; set; }
public string CourseName { get; set; }
}

public class CourceNames
{
[DataMember]
public string CourseID { get; set; }
[DataMember]
public string CourseName { get; set; }
}

public class Courses
{
[DataMember]
public string MajorNameID { get; set; }
[DataMember]
public string MajorName { get; set; }
[DataMember]
public List<CourceNames> CourseNames { get; set; }

public Courses()
{
Course = new List<CourceNames>();
}
}

我正在使用 SQLreader 从 MYSQL 数据库中读取两个表

List<courseList> courseList

类。我的成绩记录如下:

MajorNameID   MajorName     CourseName         CourseID
100000 Physics Thermodynamic PHY101
100000 Physics Quantum PHY200
100000 Physics Relativity PHY300
200000 Chemistry Gases CHM300
200000 Chemistry Oreganic CHM500
200000 Chemistry Inroganic CHM120
300000 Mathematics Pure MAT100
300000 Mathematics Applied MAT300

如您所见,我想填充 Courses 类。我不确定如何使用 Linq 执行此操作。

我最近学习了以下方法,但它不能正常工作。

        List<Courses> courses = courseList .GroupBy(
d => new { d.MajorNameID , d.MajorName },
d => d.MajorName,
(key, g) => new courses
{
MajorNameID = key.MajorNameID,
MajorName = key.MajorName,
CourseNames = g.Distinct().ToList()
}
).ToList();

我收到以下错误:

> Severity  Code    Description Project File    Line    Suppression State
> Error CS0029 Cannot implicitly convert type
> 'System.Collections.Generic.List<string>' to
> 'System.Collections.Generic.List<CourceNames>'...........

以上内容我不是很理解。有人可以帮助我如何正确设置它吗?我想加载列表中每个专业的类(class)。

最佳答案

尝试通过仅按键分组并在组中的每个项目上使用 Select 表达式来简化您的组。

最后一个技巧是您必须将类(class)名称转换为正确的类型。编译器应该给你足够的提示,但 Linq GroupBy 与 MySQL/TSQL GroupBy 语句非常不同,因此一开始它们可能很难掌握。

List<Courses> courses = courseList.GroupBy(
d => new { d.MajorNameID, d.MajorName }
).Select(g => new Courses
{
MajorNameID = g.Key.MajorNameID,
MajorName = g.Key.MajorName,
CourseNames = g.Distinct().Select(c =>
new CourceNames { CourseID = c.CourseID, CourseName = c.CourseName }).ToList()
}
).ToList();

[更新:我通常不使用元素投影语法,所以我不得不编译它来检查]使用与您的问题(元素投影)相同的 GroupBy 重载,这是相同的查询,请注意元素选择器表达式现在选择元素,原来的帖子在那里有一个关键表达式:

List<Courses> courses2 = courseList.GroupBy(
d => new { d.MajorNameID, d.MajorName }, // key selector
c => new CourceNames { CourseID = c.CourseID, CourseName = c.CourseName }, // element selector
(key, g) => new Courses
{
MajorNameID = key.MajorNameID,
MajorName = key.MajorName,
CourseNames = g.Distinct().ToList()
}
).ToList();

关于c# - 如何使用 List.Distinct 来填充自定义类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310360/

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