2010-11-05 64 views
1

我有,(在Linq中)IEnumerable類型的Client。 現在我必須返回一個類型爲ClientVM的通用列表。客戶端虛擬機是客戶端的一個子集(不是子類型或任何東西),我不能讓它工作。將IEnumerable <X>轉換爲列表<Y>

下面是我到目前爲止的代碼,但它不以這種方式工作。 但也許這段代碼可以給你一個除了我的職務指定什麼我想要做的:

clientVMs = clients.ToList().ConvertAll(new ClientVM(z => z.Reference, z=>z.Fullname)); 

clientVMs是一個通用List<ClientVM>,類ClientWM有一個構造函數的兩個屬性,客戶是IEnumerable<Client>

而且,offtopic,當你處理泛型時編譯器消息對於人類來說是不可讀的,imho。

+0

這是編譯器消息:錯誤類型參數的方法「System.Collections中。 Generic.List .ConvertAll (System.Converter )'不能根據用法推斷。嘗試明確指定類型參數。 – Michel 2010-11-05 10:42:35

回答

7

也許這樣?

var clientVMs = clients.Select(c => new ClientVM(c.Reference, c.Fullname)) 
         .ToList(); 
+0

這麼快,我也喜歡選擇呢!所以'爲什麼我沒有想到':) – Michel 2010-11-05 10:55:49

1
clients.ToList().Select(new ClientVM{ z => z.Reference, z=>z.Fullname }).ToList(); 
+1

這實際上並沒有返回一個列表;它返回一個可枚舉的 – 2010-11-05 10:51:01

+0

我太急於閱讀這個問題了:)編輯。 – 2010-11-05 10:54:24

1

你的lambda表達式是錯誤的。你可能想:

var clientVMs = clients.ToList().ConvertAll(
    client => new ClientVM(client.Reference, client.Fullname)); 
2

你得爲代表的錯誤的語法內ConvertAll

clientVMs = clients.ToList().ConvertAll(z => new ClientVM(z.Reference, z.Fullname)); 
相關問題