0

我有以下 LINQ 语句:

var query =(from item in _itemRepository.FindAll()
            where item.Id == "20649458"
                from singelitem in item.ListOfChildren
                where singelitem.Property == "singelitem"
                from manyitems in item.ListOfChildren
                where manyitems.Property == "many"
                select new
                            {
                                item.Id,
                                singelitem,
                                manyitems 
                            });
var result = query.ToList();

Tasks 是对象的集合,where 子句tasks.Property == "something"匹配集合中的多个项目,但是当我在 select 中使用匿名类型时,我只返回匹配结果的一个项目(第一个)而不是任务集合。如何取回集合中的所有匹配任务?

编辑:真正发生的是我得到了平面对象(就像来自连接语句的数据库结果集)。

4

2 回答 2

3

当您不使用匿名类型时,您正在处理实体类,该实体类在您访问它们时会延迟加载任务。如果您想使用结果加载任务,请尝试使用 Include 方法来急切加载子项。请参阅如何构造 LINQ to Entities 查询以直接加载子对象,而不是调用 Reference 属性或 Load()

于 2012-06-04T14:53:31.150 回答
0

这是 Linq 的正确行为。事实上,你所期望的是不可能的。您期待一个匹配 item.Id == "123"; 的项目 如果不止一个怎么办?它只是为每个匹配的项目创建一个匿名项目。只需考虑将第一个“from”语句更改为第二个;你会期待什么?

此外,第一个“from”语句和第二个语句之间没有关系,这使得这个查询有点“奇怪”。为什么不直接将查询分成 2 个;并创建一个具有所需属性的新对象?

于 2012-06-04T14:59:18.907 回答