2016-06-10 73 views
0

我想从四个不同的对象列表中添加一个范围值到列表。这是代码,我必须从一个对象列表中添加的所有项目......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的最有效方法。谁能帮忙?

+0

所以你只是想把几个列表结合在一起? – DavidG

+0

只有4个参数来自每个列表中的每个项目,都放在一个列表中 - 即列表中每个对象可能有20个属性(每个列表将有不同的对象,但有些参数相同),但是我只需要创建的日期,标识,类型以及是否已提交,这将在每个列表中的每个对象中提供。 – user3429672

+0

列表是否包含相同类型的对象? – Magnus

回答

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(); 
+0

嗨 - 我有这个工作使用你的第二种方法。我不认为我可以使用第一个,因为表单来自实体框架。你知道实体框架模型是否可以与接口一起工作吗? – user3429672

+1

我认为实体框架生成的实体类是“部分”的。这意味着如果您添加您自己的部分类与相同的名称,可以实现所需的接口。 – Magnus

0

试试这个:

var formList = forms.LimitedWillForms.Select(a => new FormList 
        { 
         DateCreated = a.CreationDate, 
         FormId = a.Id, 
         FormType = a.FormType, 
         Submitted = a.SubmissionDate != null 
        }) 
        .Union(forms.FullWillForms.Select(a => new FormList 
        { 
         DateCreated = a.CreationDate, 
         FormId = a.Id, 
         FormType = a.FormType, 
         Submitted = a.SubmissionDate != null 
        })) 
        .Union(forms.FullWillForms2.Select(a => new FormList 
        { 
         DateCreated = a.CreationDate, 
         FormId = a.Id, 
         FormType = a.FormType, 
         Submitted = a.SubmissionDate != null 
        })) 
        .Union(forms.FullWillForms3.Select(a => new FormList 
        { 
         DateCreated = a.CreationDate, 
         FormId = a.Id, 
         FormType = a.FormType, 
         Submitted = a.SubmissionDate != null 
        })).ToList(); 
+0

感谢您在此上的时间。这个解决方案每个列表都产生一个错误(非可调用成员'Form.LimitedWillForms'不能像方法一样使用。) - 我不确定为什么,但是使用.concat的Magnus解决方案似乎工作正常。谢谢。 – user3429672

相关问题