我有一组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
执行此操作答案 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));
当你有两个属性要在两个类之间进行映射时,这种方法非常有用。
希望这会对你有所帮助。