.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/