演员已经杀了我 - ?

问题描述:

Error 4 Cannot implicitly convert type 
'System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<CCE_2009.Data.Person>>' 
to 
'System.Collections.Generic.IEnumerable<CCE_2009.Data.Person>' 

从生成:演员已经杀了我 - ?

var RecoveryManagerQuery = 
    from RM in 
    (
     from REP in e.Results 
     select REP.Organization.Representatives.Select(RM=>RM.Person) 
    ) 
    select RM; 
RecoveryManagers = new ObservableCollection<Person>(RecoveryManagerQuery.ToList()); 

这是为什么IEnumberable包埋 - 组织有一个或多个,其中每个代表是关系到一个只有一个人的代表。

我想符合该条件的人员名单.....

argghh ..

[R

+0

冷静下来,深呼吸。然后你粘贴整个错误信息,并给出一些关于e代表的内容,这是LINQ2Objects还是LINQ2SQL? – 2010-09-15 19:00:51

外部查询是多余的。我们可以通过删除它说明清楚:

var RecoveryManagerQuery = 
    from REP in e.Results 
    select REP.Organization.Representatives.Select(RM=>RM.Person); 

正如你所看到的,select条款说,对于每一个REP,选择所有与REP的组织代表有关的人。这意味着RecoveryManagerQuery中的每个元素都将是集合Person对象,而不是个别的对象。要扁平化查询,以便返回一组Person对象,而不是一集一集Person对象中的:

var RecoveryManagerQuery = 
    from REP in e.Results 
    from orgRep in REP.Organization.Representatives 
    select orgRep.Person; 

编辑:这里是点符号:

e.Results.SelectMany(
    REP => REP.Organization.Representatives, 
    (REP, orgRep) => orgRep.Person); 
+0

我看你的例子他们只有一个选择,因此,只有一个集合。你怎么用点符号来写这个? var RecoveryManagerQuery = e.Results.Select(P => P.Organization.Representatives.Select(RM => RM.Person));但这也有两个选择,并产生相同的错误..只是好奇在这个时间点! – codeputer 2010-09-15 19:58:12

+0

我以这种方式工作 - 看起来比我想象的要复杂得多: e.Results.Select(P => P.Organization.Representatives).SelectMany(Reps => Reps.ToArray())。选择(代表=> Rep.Person); – codeputer 2010-09-15 20:02:25

+0

@codputer:我在我的答案中加了点符号。 – 2010-09-16 02:14:39

什么你想达到什么目的?由于嵌套的LINQ查询,您正在获取IEnumerable的IEnumerable。

取决于你想达到什么样的,你可以改变你的查询:

var RecoveryManagerQuery = 
    from REP in e.Results 
    select REP.Organization.Representatives.Select(RM=>RM.Person); 
+0

我测试了这个,它仍然返回一个IEnumberable中的IEnumerable ...我认为现在对我来说是有意义的,因为它们是两个选择因此这两个集合...查看答案以避免双重选择 – codeputer 2010-09-15 19:57:15