如何使用 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 做到这一点
测试列表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 个类之间映射时,这种方式非常有用。
希望这对您有所帮助。