2013-05-13 188 views
0

下一个实体的定义出发:LINQ的相关子查询

Public Class Certificate{ 
    public ID as int; 
} 

Public Class Authority{ 
    ID int; 
    Certificates IEnumerable<Certificate>; 
} 

我的功能收到
2个集:IEnumerable<Certificate>IEnumerable<Authority>。我需要选择Authorities,其中Certificates collectionIEnumerable<Certificate>输入参数中至少有一个证书。

我最初的实现是枚举IEnumerable<Certificate>并使用Where(predicate)选择Authority

Public IEnumerable<Authority> SelectAuthorities(authList IEnumerable<Authority>, certList IEnumerable<Certificate>){ 

    foreach (Certificate loadedCert in certList) { 
    yield return auth.Where(a => a.Certificados.Any(c1 => c1.IDCert == loadedCert.IDCert)); 
    } 

} 

我认为必须有使用更复杂的LINQ相关子查询(我觉得它在“力”),以避免for循环的方式,但我不能找到它。

任何人都可以帮忙吗?

回答

3

您可以使用双Any避免循环:

authList.Where(a => a.Certificados 
        .Any(c1 => certList.Any(c2 => c1.IDCert == c2.IDCert))); 
+1

运行完美。谢谢。这很简单。我想我是在程序员的块里。 :) – jlvaquero 2013-05-13 08:48:49