在 LINQ 中使用分组依据填充对象列表

本文关键字:填充 对象 列表 LINQ | 更新日期: 2023-09-27 18:33:54

>我有以下类

public class R
{
    public Guid Id { get; set; }
    public string Title { get; set; }
    public int RNumber { get; set; }
    public int VNumber { get; set; }
}
public class RD
{
    public Guid RDId { get; set; }
}
public class RRDS
{
    public R R { get; set; }
    public string ProjectTitle { get; set; }
    public List<RD> RDs{ get; set; }
}
public class RRSDto
{
    public Guid Id { get; set; }
    public string Title { get; set; }
    public string ProjectTitle { get; set; }
    public int RNumber { get; set; }
    public int VNumber { get; set; }
    public Guid RDId { get; set; }
}

我需要将RRSDto列表转换为RRDS列表。Id、Title、ProjectTile、RNumber、VNumber 可以相同,但 RDId 会有所不同。

这是我在 LINQ 上尝试过的:

var temp = (from r in rrs
            group r by new
            {
                r.Id,
                r.Title,
                r.ProjectTitle,
                r.RNumber,
                r.VNumber,
            } into gcs
            select new RRDS()
            {
                R = new R()
                {
                    Id = gcs.Key.Id,
                    Title = gcs.Key.Title,
                    RNumber = gcs.Key.RNumber,
                    VNumber = gcs.Key.VNumber
                },
                ProjectTitle = gcs.Key.ProjectTitle,
                RDs = new List<RD>()
                {
                    new RD()
                    {
                        RDId = gcs.ToList().Select(g =>  g.RDId).FirstOrDefault()
                    }
                }
            }).ToList();

我想要RDIds列表,而不是FirstOrDefault。如何使用 LINQ 获取它?

提前感谢,苏约格

在 LINQ 中使用分组依据填充对象列表

如果您

想要所有RDId,那么只需使用Select进行投影,我认为没有任何理由使用FirstOrDefault,因为您不是在组中寻找第一个RDId:-

 ,RDs = gcs.Select(g => new RD { RDId = g.RDId }).ToList()