首页 > 解决方案 > 有没有更好的方法将列表变成列表 C#

问题描述

我想要有以下课程,并且我想将我的对象从使用 LINQ 更改List<CharacterDto>List<Character>使用 LINQ,并且输出将在 json 中。

public class Character
{
    public int Id
    public string Name
    public List<item> Items
}
public class Item
{
    public string ItemName
    public int ItemId
}
public class CharacterDto
{
    public int Id
    public string Name
    public string ItemName
    public int ItemId
}

例子:

CharacterDto:
{Id = 1, Name = "Archer", ItemName = "Bow", ItemId = 2},
{Id = 1, Name = "Archer", ItemName = "Armor", ItemId = 1},
{Id = 2, Name = "Warrior", ItemName = "Sword", ItemId = 3},
{Id = 2, Name = "Warrior", ItemName = "Armor", ItemId = 1},
{Id = 3, Name = "Mage", ItemName = "Armor", ItemId = 1}
Character:
{Id = 1, Name = "Archer", Items:{ItemName = "Armor", ItemId = 1},{ItemName = "Bow", ItemId = 2}},
{Id = 2, Name = "Warrior", Items:{ItemName = "Armor", ItemId = 1},{ItemName = "Sword", ItemId = 3}},
{Id = 3, Name = "Mage", Items:{ItemName = "Armor", ItemId = 1}}

我目前有一个解决方法,但它看起来很乱。

public class Character
{
    public int Id
    public string Name
    public List<CharacterDto> Items
}
public class CharacterDto
{
    [JsonIgnore]public int Id
    [JsonIgnore]public string Name
    public string ItemName
    public int ItemId
}
public List<character> function(){
    List<CharacterDto> data = getFromDB();
    List<Character> Characters = data.GroupBy(x => new {x.Id, x.Name}).Select(y => new Character()
    {
        Id = y.Key.Id, 
        Name = y.Key.Name, 
        Items = y.ToList()
    }).ToList();
    return Characters

编辑:我的意思是我不想在课堂上使用 JsonIgnore,我想在课堂上使用List<item>而不是List<CharacterDto>在课堂上使用 Charactor

标签: c#linq

解决方案


如果你想Character.Items成为一个List<item>而不是List<CharacterDto>.
首先,我们必须更改对象定义:

public class Character
{
    public int Id {get;set;}
    public string Name {get;set;}
    public List<Item> Items {get;set;}
}

然后您可以使用 Select 将分组映射CharacterDtoItem

Items = y.Select(c=> new Item{ ItemName = c.ItemName, ItemId = c.Item }).ToList()

推荐阅读