如何让导航属性上的选择返回Linq To Entities中的数组

时间:2014-05-21 12:38:12

标签: c# linq entity-framework entity-framework-6 entity-framework-6.1

我有以下查询编译精细

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[]

2 个答案:

答案 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()