演员杀了我 - ?

时间:2010-09-15 18:57:16

标签: linq casting

 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

2 个答案:

答案 0 :(得分:3)

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

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);

答案 1 :(得分:0)

你想要达到什么目的?由于嵌套的LINQ查询,您将获得IEnumerable的IEnumerable。

根据您要实现的目标,您可以将查询更改为:

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