gpt4 book ai didi

linq - 我可以在 LINQ to Entities 的 SELECT 中执行子查询以填充模型中的列表吗?

转载 作者:行者123 更新时间:2023-12-04 13:04:57 26 4
gpt4 key购买 nike

.Select中是否可以有子查询? LINQ to Entities 的一部分查询以填写 List<string>在我的 View 模型中?我找到了 Use Linq To Entities subquery within Select clause to fetch a field value但是当我尝试这样做时,我收到错误消息:

NotImplementedException: Microsoft.Data.Entity.Query.ResultOperators.Internal.QueryAnnotationResultOperator



这可能与 Entity Framework 7 和 ASP.Net 5 MVC 6 有关吗?
var model = _DbContext.ReleaseVersions
.OrderByDescending(rv => rv.DateReleased)
.Select(rv => new ReleaseNotesVM()
{
ID = rv.ID,
CurrentVersion = string.Concat(rv.Major, '.', rv.Minor, '.', rv.Patch),
ReleaseNotes = _DbContext.ReleaseNotes
.Where(rn => rn.ReleaseVersionID == rv.ID)
.Include(rn => rn.ReleaseVersion)
.Select(rn => rn.Note)
.ToList()
}).FirstOrDefault();

正在填充的 ViewModel:
public class ReleaseNotesVM
{
public byte ID { get; set; }
public string CurrentVersion { get; set; }
public DateTime CurrentVersionReleaseDate { get; set; }
public IEnumerable<SelectListItem> VersionList { get; set; }
public byte SelectedVersionID { get; set; }
public ICollection<string> ReleaseNotes { get; set; }
}

数据模型:
public class ReleaseVersion
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public byte ID { get; set; }

public DateTime DateReleased { get; set; }
public byte Major { get; set; }
public byte Minor { get; set; }
public byte Patch { get; set; }

public virtual ICollection<ReleaseNote> ReleaseNotes { get; set; }
}
public class ReleaseNote
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

public string Note { get; set; }
public byte ReleaseVersionID { get; set; }

[ForeignKey("ReleaseVersionID")]
public ReleaseVersion ReleaseVersion { get; set; }
}

最佳答案

如果我假设正确,您必须在 ReleaseVersions 之间建立一对多关系。和 ReleaseNotes ,这意味着 ReleaseVersion 中应该有导航属性类指的是 ReleaseNotes 的集合,使您能够像这样重写代码:

var model = _DbContext.ReleaseVersions
.Include(rv => rv.ReleaseNotes)
.OrderByDescending(rv => rv.DateReleased)
.Select(rv => new ReleaseNotesVM
{
ID = rv.ID,
CurrentVersion = string.Concat(rv.Major, '.', rv.Minor, '.', rv.Patch),
ReleaseNotes = rv.ReleaseNotes.Select(rn => rn.Note).ToList()
}).FirstOrDefault();

更新

使用 List<string> ReleaseNotes而不是 ICollection<string>ReleaseNotesVM .

关于linq - 我可以在 LINQ to Entities 的 SELECT 中执行子查询以填充模型中的列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34863778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com