2009-12-16 47 views
1

我遇到了以下問題:轉換IEnumerable的LINQ列表類型列表

我使用LINQ到濾液這樣一些數據:

var listPerson = (from objPerson in ListPerson 
           select new 
           { 
            objPerson.IdPerson, 
            objPerson.ApePerson, 
            objPerson.NomPerson, 
            objPerson.EdadPerson, 
            objPerson.Gender 
           }).Distinct(); 

一切工作正常,但問題是當我試圖將listPerson列表投入到

List<PersonClass> 

我該怎麼做那個演員?我嘗試過:

listPerson.ToList(); 

但它會拋出一個異常(無法從IEnumerable轉換爲IEnumerable)。

在此先感謝。我希望我明確自己。

回答

1

變種listPerson是IEnumerable類型<COMPILERGENERATEDANONYMOUSTYPE>,而不是一個IEnumerable的<PersonClass>。

代替

select new 
{ 
    objPerson.IdPerson, 
    objPerson.ApePerson, 
    objPerson.NomPerson, 
    objPerson.EdadPerson, 
    objPerson.Gender 
} 

做:

select new PersonClass() 
{ 
    IdPerson = objPerson.IdPerson, 
    // etc 
} 

如果你真的很需要那匿名類型存在,並在以後轉換到一個列表,那麼你可以做的另一種選擇:

listPerson.Select(p => new ListPerson() { IdPerson = p.Person, /* ... */ }); 

listPerson.Select(p => new ListPerson(p.Person, /* ... */)); 
+0

非常感謝!你解決了我的問題。 – lidermin 2009-12-17 15:57:00

1

您擁有使用新的{...}語法創建的匿名類的實例集合。它無法轉換爲PersonClass的實例列表,而無需將每個項目轉換爲PersonClass實例。

1

我假設你在PersonClass對象列表上使用linq,爲什麼不直接選擇該對象。使用new關鍵字創建一個匿名類,它不是PersonClass。

var DistPerson = (from objPerson in ListPerson 
        select objPerson).Distinct(); 

var DistPersonList = DistPerson.ToList(); 
2

您正在linq語句中創建一個匿名類型。您需要一種方法將該匿名類型的實例轉換爲PersonClass的實例。

如果ListPersonIEnumerable<PersonClass>,您應該只能做ListPerson.Distinct().ToList()

+0

+1用於發佈獲取數據的最佳方式。 – Wade73 2009-12-16 20:29:58