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

时间:2013-09-19 12:42:33

标签: c# linq

我有一组Test对象:

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

执行此操作

2 个答案:

答案 0 :(得分:9)

tests是您的测试清单

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

我认为C意味着正确,如果不是你可以把其他东西放在那里。详细了解Select from linq

它会生成IEnumerable<TestResult>所以如果你想让List<TestResult>使用ToList()

答案 1 :(得分:1)

你可以做wudzik建议的。 但如果你的班级有很多属性,我会使用Automapper。 您需要先配置automapper(添加映射),然后有一个指南here。 我总是把它放在一个bootstrapper类中,并在global.asax中调用它。 对于您的示例,它将如下所示:

Mapper.CreateMap<Test, TestResult>();

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

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

如果两个类的属性名相同,Automapper将知道哪个值属于哪个值。否则,您将不得不稍微改变配置。 对于你的例子,这将是:

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

当你有两个属性要在两个类之间进行映射时,这种方法非常有用。

希望这会对你有所帮助。