2013-12-11 70 views
0

我有下面的linq目前正在工作,但我真正想要的是返回一個ICollection<SexyPeopleVM>而不是一個列表。但是我無法理解語法,並且我嘗試過的其他選擇在運行時失敗。如何從linq返回ICollection <object>當使用選擇新對象(){}

這可能嗎?我怎樣才能做到這一點?

var o = from s in sexyPeople 
        select new SexyPeopleVM() 
        { 
         id = s.ID, 
         title = s.Title, 
         views = s.Views, 
         url = s.GetFullyQualifiedURL(), 
         friendlyDate = s.DateCreated.AsShortFriendly() 
        }; 
      List<SexyPeopleVM> list = o.ToList(); 
      return list; 

回答

7

List<T>實現ICollection<T>
你不需要做任何事情。

+1

肯定。只需指定'ICollection '作爲函數的返回類型。 –

3

正如SLaks說,他打我張貼,但我想補充,就可以讓你的代碼乾淨了一點也:

return (from s in sexyPeople 
        select new SexyPeopleVM() 
        { 
         id = s.ID, 
         title = s.Title, 
         views = s.Views, 
         url = s.GetFullyQualifiedURL(), 
         friendlyDate = s.DateCreated.AsShortFriendly() 
        }).ToList(); 

的另一件事,讓Resharper如果你沒有它。

我現在用

var list = new List<object>(); 

代替:

List<object> list = new List<object>(); 

A good post as to why to use var.

這只是一種編碼風格購買ReSharper的清理您的代碼不少。

我習慣了其他更清潔的習慣,比如上面提到的兩個,感謝Resharper。現在我不能沒有它。

+0

或者,'sexyPeople.Select(s => new SexyPeopleVM(){...})。ToList()' –

+0

是的真的,這似乎混淆了對C#更新的人,所以我不使用它,除非我不得不。 – ErocM

+0

你的代碼不會編譯。您爲簡化它所做的更改無效。 – Servy

1

如果你真的想ICollection中明確,只是做

return o.ToList() as ICollection<SexyPeopleVM>;