列表转换C#LINQ

Cod*_*der 0 c# linq ilist

我有两个课程如下

public class ClassX
{
    int id,
    string title,
    string description
} 

public class ClassY
{
    int id,
    string title,
    string description,
    int localeId,
    int clientId
}
Run Code Online (Sandbox Code Playgroud)

我从这些类中有两个列表,如下所示

IList<ClassX> listX = new List<ClassX>();

IList<ClassY> listY = new List<ClassY>();
Run Code Online (Sandbox Code Playgroud)

我需要将listY列表转换为listX列表

在这种情况下请注意ClassY的属性即

int localeId,

int clientId
Run Code Online (Sandbox Code Playgroud)

不会填充值

我可以从listY到listX列表进行隐蔽

Tim*_*ter 7

当然是:

listX = listY.Select(y => new ClassX()
{
    description = y.description,
    id = y.id,
    title = y.title
}).ToList();
Run Code Online (Sandbox Code Playgroud)

这将从中选择所有常见属性,ClassX并为每个实例ClassY初始化ClassX实例ClassY.然后它调用ToList创建一个新的List<ClassX>.

请注意,您需要添加using System.Linq.

编辑:我必须同意@AdrianFaciu你应该考虑重构你的课程.当你需要将两个相似的类相互转换时,听起来好像你最好做ClassX一个基类ClassY.

public class ClassX
{
    public int id { get; set; }
    public string title { get; set; }
    public string description { get; set; }
}

public class ClassY : ClassX
{
    public int localeId { get; set; }
    public int clientId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在ClassY隐含着所有属性ClassX.