我有以下查询编译精细
query.Select(p => new DataObject() {
Id = p.Id,
TaskIds = p.Tasks.Select(t => t.TaskId).ToArray()
});
但以运行时异常结束
LINQ to Entities无法识别方法' System.Guid [] ToArrayGuid' 方法,并且此方法无法转换为商店表达式。
这是DataObject类
public class DataObject {
public int Id { get;set; }
public Guid[] TaskIds { get; set; }
}
我的问题是:如何通过从实体的导航属性中进行选择来返回Guid[]
答案 0 :(得分:3)
你必须推迟创建数组,直到转换为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()
})
答案 1 :(得分:1)
这是因为EF总是会尝试将你的linq查询转换为tsql操作。 你应该把它带到内存中这样:
p.Tasks.ToList().Select(t => t.TaskId).ToArray()