我遇到以下问题:
我正在使用linq以这种方式过滤一些数据:
var listPerson = (from objPerson in ListPerson
select new
{
objPerson.IdPerson,
objPerson.ApePerson,
objPerson.NomPerson,
objPerson.EdadPerson,
objPerson.Gender
}).Distinct();
一切正常,但问题是当我试图将listPerson List转换为
时List<PersonClass>
我怎么能做那个演员?我试过了:
listPerson.ToList();
但它抛出一个异常(无法从IEnumerable转换为IEnumerable)。
提前致谢。我希望自己清楚明白。
答案 0 :(得分:2)
您正在linq语句中创建匿名类型。您需要一种方法将该匿名类型的实例转换为PersonClass的实例。
如果ListPerson
是IEnumerable<PersonClass>
,您应该能够ListPerson.Distinct().ToList()
。
答案 1 :(得分:1)
您拥有使用新的{...}语法创建的匿名类的实例集合。如果不将每个项目转换为PersonClass实例,则无法将其转换为 PersonClass 的实例列表。
答案 2 :(得分:1)
我假设您在PersonClass对象列表中使用linq,那么为什么不选择该对象。使用new关键字创建一个匿名类,它不是PersonClass。
var DistPerson = (from objPerson in ListPerson
select objPerson).Distinct();
var DistPersonList = DistPerson.ToList();
答案 3 :(得分:1)
var listPerson的类型为IEnumerable&lt; COMPILERGENERATEDANONYMOUSTYPE&gt;,而不是IEnumerable&lt; PersonClass&gt ;.
而不是
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, /* ... */ ));