带IEnumerable的LINQ选择
我用的是EF4 我有一个带IEnumerable的LINQ选择,linq,entity-framework,Linq,Entity Framework,我用的是EF4 我有一个IEnumerable,其中每个项目(属于Type01)都有一个IEnumerable 这可以解释: Type01 objType01 = ...; IEnumerable<Type02> en = objType01.allObjType02; 选择返回必须是: myItem01a myItem01a myItem01b myItem01b myItem01b 我知道如何使用老式的SQL(JOIN子句)来实现这一点。但我对LINQ表达式还相当陌生。 怎么
IEnumerable
,其中每个项目(属于Type01
)都有一个IEnumerable
这可以解释:
Type01 objType01 = ...;
IEnumerable<Type02> en = objType01.allObjType02;
选择返回必须是:
myItem01a
myItem01a
myItem01b
myItem01b
myItem01b
我知道如何使用老式的SQL(JOIN子句)来实现这一点。但我对LINQ表达式还相当陌生。
怎么做呢?作弊。使用
SelectMany
(或s中的等效倍数)迭代所有Type02
s,但每次只生成一个Type01
:
var repeatedType01s =
from t01 in enumerableOfType01s
from t02 in t01.allObjType02
select t01;
现在,repeatedType01s
是一个具有所需基数的IEnumerable
。为什么要这样?当我将IEnumerables作为数据源传递时,FastReport.net遇到了一些问题。FastReport在尝试读取“复杂”结构(如带子对象)时失败。它工作的唯一方式(对我来说)是使用一个“简单”的结构,就像它是一个DB表一样。Myt01.allObjType02
给了我一个对象引用,而不是设置为对象的实例。错误。发生这种情况的原因是allObjType02
为Null
,但当一个make a“normal”LINQ选择并使用foreach进行迭代时,我的allObjType02
属性有一个值。错误在哪里?我用的是EF4。谢谢,我想我知道发生了什么。有时我的t01.allObjType02
为null
。它正在破坏我的密码。当此属性为空时,是否有办法“显示”该项?这就像SQL语句的左连接,我想我通过将第二个from
放在我这里的where子句之后来修复它。谢谢
var repeatedType01s =
from t01 in enumerableOfType01s
from t02 in t01.allObjType02
select t01;