LINQ以匿名类型获取集合

时间:2012-06-04 14:51:02

标签: c# linq entity-framework anonymous-types

我有以下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();

<击> 任务是对象的集合,where子句tasks.Property == "something"匹配集合中的几个项目,但是当我在select中使用匿名类型时,我只返回匹配结果的一个项目(第一个)而不是任务集合。我怎样才能收回集合中的所有匹配任务?

编辑: 真正发生的是我获得了扁平对象(就像来自连接语句的db结果集)。

2 个答案:

答案 0 :(得分:3)

当你不使用匿名类型时,你正在处理实体类,当你访问它们时,它们会延迟加载任务。如果要使用结果加载任务,请尝试使用Include方法来急切加载子项。见How do you construct a LINQ to Entities query to load child objects directly, instead of calling a Reference property or Load()

答案 1 :(得分:0)

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

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