我有以下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结果集)。
答案 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;并创建具有所需属性的新对象?