我正在尝试将四个不同对象列表中的一系列值添加到列表中。这是我必须添加一个对象列表中的所有项目的代码......
var formList = new List<FormList>();
formList = forms.LimitedWillForms.Select(a => new FormList()
{
DateCreated = a.CreationDate,
FormId = a.Id,
FormType = a.FormType,
Submitted = a.SubmissionDate != null
}).ToList();
我试图不仅从forms.LimitedWillForms列表中添加,而且还从forms.FullWillForms和forms.FullWillForms2以及forms.FullWillForms3中添加相同的参数。这似乎可以将选定的参数从表单添加到列表中。
我不确定使用linq将所有四个列表中的选定参数添加到formList的最有效方法。有人可以帮忙吗?
答案 0 :(得分:1)
由于列表包含不同类型的对象,因此最好的选择是为公共属性的所有类型添加公共接口。
public interface IRecord
{
DateTime DateCreated {get;set;}
int FormId {get;set;}
....
}
然后你可以这样做:
var formList = forms.LimitedWillForms
.Cast<IRecord>
.Concat(forms.FullWillForms)
.Concat(forms.FullWillForms2)
.Concat(forms.FullWillForms3)
.Select(x => new FormList()
{
DateCreated = x.CreationDate,
FormId = x.Id,
FormType = x.FormType,
Submitted = x.SubmissionDate != null
}).ToList();
如果您只是在IRecord
而不是FormList
取回列表,那么您实际上可以跳过上一个select.
如果无法做到这一点,则需要从每个集合中选择属性。
var formList = forms.LimitedWillForms.Select(x => new FormList()
{
DateCreated = x.CreationDate,
FormId = x.Id,
FormType = x.FormType,
Submitted = x.SubmissionDate != null
}).Concat(
forms.FullWillForms.Select(x => new FormList()
{
DateCreated = x.CreationDate,
FormId = x.Id,
FormType = x.FormType,
Submitted = x.SubmissionDate != null
}
).Concat(...).ToList();
答案 1 :(得分:0)
试试这个:
@ContentChild()