如何使用 LINQ 从另一个列表填充对象列表

本文关键字:列表 填充 对象 另一个 何使用 LINQ | 更新日期: 2023-09-27 18:32:03

我有一个测试对象的集合:

IList<Test> TestFromDatabase ;
public class Test 
{
    public int TestId { get; set; }
    public bool? C { get; set; }
    public bool? R { get; set; }
    public string Text { get; set; }
}

我需要将其制作成 TestResult 对象的集合:

public class TestResult
{
    public int TestId { get; set; }
    public bool? Correct { get; set; }
}

有人可以告诉我如何使用 LINQ 做到这一点

如何使用 LINQ 从另一个列表填充对象列表

测试列表tests在哪里

List<Test> tests = PerformTests();
var testresults = tests.Select(x=>new TestResult { TestId = x.TestId, Correct = x.C });

我认为C意味着正确,如果不是,你可以放别的东西。阅读更多 关于 从 linq 中选择

它将产生IEnumerable<TestResult>所以如果你想让它成为一个List<TestResult>请使用 ToList()

你可以按照 wudzik 的建议去做。但是如果你的类有很多属性,我会使用自动映射器。您需要先配置自动映射器(添加映射),这里有一个指南。我总是把它放在引导类中,并在global.asax中调用它。对于您的示例,它将如下所示:

Mapper.CreateMap<Test, TestResult>();

配置完成后,您可以使用以下代码创建列表:

List<Test> tests = PerformTests();
List<TestResult>testresults = tests.Select(t=>Mapper.Map<Test, TestResult>(t)).ToList();

如果两个类的属性名称相同,自动映射器将知道哪个值属于何处。否则,您将不得不稍微更改配置。对于您的示例,这将是:

Mapper.CreateMap<Test, TestResult>()
   .ForMember(dest => dest.Correct, opt => opt.MapFrom(origin => origin.C));

当您有很多属性要在 2 个类之间映射时,这种方式非常有用。

希望这对您有所帮助。