2016-06-10 56 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

相關問題