2012-06-25 44 views
2

选择我使用EF 4LINQ与IEnumerable的

我有一个IEnumerable<Type01>其中每个项目(的Type01)都有一个IEnumerable<Type02>

这可以解释:

Type01 objType01 = ...; 
IEnumerable<Type02> en = objType01.allObjType02; 

我需要做的(使用LINQ)一个选择,让我一个IEnumerable<Type01>的结果,但“记录计数”必须是相同的“记录数的总和“所有Type02项目。

例如。对于这个列表:

myItem01a 
    myItem02a 
    myItem02b 
myItem01b 
    myItem02c 
    myItem02d 
    myItem02e 

的选择回报必须是:

myItem01a 
myItem01a 
myItem01b 
myItem01b 
myItem01b 

我知道如何利用老同学SQL(JOIN子句)来做到这一点。但我对LINQ表达式相当陌生。 怎么办?

+0

你为什么要这么做? – cadrell0

+0

当我将IEnumerables作为DataSources传递时,我遇到了FastReport.net的一些问题。当试图读取带有子对象的“复杂”结构时,FastReport失败。它唯一的工作方式(对我而言)是使用“简单”结构,就好像它是一个数据库表。 –

回答

6

作弊。使用SelectMany(或等值多个from S)遍历所有Type02 S,但只得到Type01一轮每次:

var repeatedType01s = 
    from t01 in enumerableOfType01s 
    from t02 in t01.allObjType02 
    select t01; 

现在repeatedType01sIEnumerable<Type01>你想要的基数。

+0

我的't01.allObjType02'给了我一个**对象引用没有设置为一个对象的实例**错误。它发生是因为'allObjType02'是'Null',但是当一个“正常的”LINQ选择并使用foreach迭代时,我的'allObjType02'属性有一个值。错误在哪里?我正在使用EF4。谢谢。 –

+0

我想我知道发生了什么事。有时我的't01.allObjType02'是'null'。它正在破坏我的代码。有没有办法可以“显示”该项目时,该属性为空?这就像SQL语句的LEFT JOIN。 –

+0

我想我通过在where子句后面加上第二个'from'来解决它。谢谢。 ;) –