转换IEnumerable的LINQ列表类型的列表(convert ienumerable linq

2019-10-18 17:56发布

我有以下问题:

我使用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的)。

提前致谢。 我希望我自己清楚。

Answer 1:

VAR 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, /* ... */ ));


Answer 2:

你正在创建你的LINQ声明匿名类型。 你需要一种方法来匿名类型的实例转换为PersonClass的实例。

如果ListPersonIEnumerable<PersonClass>你应该能够只是做ListPerson.Distinct().ToList()



Answer 3:

您有与新{...}语法创建匿名类实例的集合。 它不能被转换成PersonClass的实例的列表而不每个项目转换为PersonClass实例。



Answer 4:

我假设你正在使用PersonClass对象的列表LINQ的,所以为什么不选择对象。 使用new关键字创建一个匿名类,它是不是一个PersonClass。

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

var DistPersonList = DistPerson.ToList();


文章来源: convert ienumerable linq list to typed list