如何在Linq to Entities中让navigationproperty上的Select返回一个数组
本文关键字:返回 数组 一个 Select 上的 Linq to Entities navigationproperty 中让 | 更新日期: 2023-09-27 18:04:37
我有以下查询,它编译得很好
query.Select(p => new DataObject() {
Id = p.Id,
TaskIds = p.Tasks.Select(t => t.TaskId).ToArray()
});
但以运行时异常
结束LINQ to Entities不能识别方法System。Guid []ToArrayGuid"方法,且该方法不能转换为存储表达式。
下面是数据对象类
public class DataObject {
public int Id { get;set; }
public Guid[] TaskIds { get; set; }
}
我的问题是:如何通过从实体
Guid[]
必须将数组的创建推迟到转换为SQL之后,才能在内存端进行创建。
query.Select(p => new {
Id = p.Id,
TaskIds = p.Tasks.Select(t => t.TaskId)
})
.AsEnumerable() // <-- SQL translation up to here. Anything after is done in-memory
.Select(p => new DataObject() {
Id = p.Id,
TaskIds = TaskIds.ToArray()
})
这是因为EF总是尝试将您的linq查询转换为tsql操作。你应该像这样把它存到内存中:
p.Tasks.ToList().Select(t => t.TaskId).ToArray()