2009-12-16 48 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