在LINQ中使用group填充对象列表

时间:2016-02-10 05:22:32

标签: c# linq

我有以下课程

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列表。我需要将RRSD列表转换为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获取它?

提前致谢, Suyog

1 个答案:

答案 0 :(得分:2)

如果您想要所有RDId,只需使用选择投影它们,我认为没有任何理由使用 FirstOrDefault ,因为您不是在寻找小组中的第一个RDId: -

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