0

我有以下查询可以很好地编译

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[]通过从实体的导航属性中选择来返回

4

2 回答 2

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()
})
于 2014-05-21T12:43:32.740 回答
1

这是因为 EF 将始终尝试将您的 linq 查询转换为 tsql 操作。你应该像这样把它带入内存:

 p.Tasks.ToList().Select(t => t.TaskId).ToArray()
于 2014-05-21T12:43:43.553 回答