Linq - 将多个不同的对象添加到列表中

时间:2016-06-10 10:37:36

标签: linq

我正在尝试将四个不同对象列表中的一系列值添加到列表中。这是我必须添加一个对象列表中的所有项目的代码......

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的最有效方法。有人可以帮忙吗?

2 个答案:

答案 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()