【发布时间】:2017-04-13 08:55:46
【问题描述】:
我的相关对象很少,关系就像
public class Project
{
public List<ProjectEdition> editions;
}
public class ProjectEdition
{
public List<EditionItem> items;
}
public class EditionItem
{
}
我只想为每个项目从 ProjectEditions 的最后条目中获取 EditionItems
例子
Project#1 -> Edition#1 [包含少量版本项],Edition#2 [包含少量版本项]
项目#2 -> 版本#1 、版本#2 和版本#3
我需要的输出仅包含 Project#1 的 Edition#2 和 Project#2 的 Edition#3 中的 EditionItems 。我的意思是来自项目的最新版本或项目的最后版本的 EditionItems
为了得到这个,我尝试了这个查询
List<EditionItem> master_list = context.Projects.Select(x => x.ProjectEditions.LastOrDefault())
.SelectMany(x => x.EditionItems).ToList();
但它在 LatsOrDefault() 部分返回错误
EntityFramework.SqlServer.dll 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理
附加信息:LINQ to Entities 无法识别方法 '---------.Models.ProjectEdition LastOrDefault[ProjectEdition](System.Collections.Generic.IEnumerable`1
那么我如何过滤项目的最后一个版本,然后在单个 LINQ 调用中从中获取 EditionItems 列表
【问题讨论】:
-
倒序排列得到
FirstOrDefault() -
正如您的例外所说,您的提供商不支持
LastOrDefault()。如果您考虑一下,当您使用 SQL 时,如果没有应用排序顺序,“last”这个术语就没有任何意义,因为记录可以来自服务器而没有特定的顺序。 -
那我怎样才能达到同样的效果呢?我正在使用 SQL Server 实体框架模型
-
您必须选择通过
ProjectEdition中的哪个属性来订购实体。假设那里有一个属性Id,那么你可以使用List<EditionItem> master_list = context.Projects.Select(x => x.ProjectEditions.OrderByDescending(pe => pe.Id).FirstOrDefault()).SelectMany(x => x.EditionItems).ToList(); -
@granit 确实如此。你应该把它作为一个答案。
标签: c# sql-server entity-framework linq-to-entities