【问题标题】:LINQ get collection in anonymous typeLINQ 获取匿名类型的集合
【发布时间】:2012-06-08 15:30:27
【问题描述】:

我有以下 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" 匹配集合中的多个项目,但是当我在选择中使用匿名类型时,我只取回匹配结果的一个项目(第一个)而不是一个集合任务。如何取回集合中的所有匹配任务?

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

【问题讨论】:

  • 使用ToList();扩展方法实现结果集合。

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


【解决方案1】:

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

【讨论】:

  • 这并不重要,因为它是我想要列出的任务。我想要一个带有任务列表的项目(结果)..
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多