我需要在通过GET返回之前向实体添加一些信息。
我创建了一个类,类似于ViewModel,具有原始实体和一个int字段,用于将完整数据返回给客户端,但是能够使其工作。我也不想返回深度字段,但需要Join
。
如何从此public class FluxoHierarchyOutput
{
public FluxoHierarchy FluxoHierarchy { get; set; }
public int ParentId { get; set; }
}
public IEnumerable<FluxoHierarchyOutput> GetFluxoHierarchyByFluxo([FromRoute] int idFluxo)
{
return _context.FluxoHierarchy
.Join(
_context.FluxoClosure,
h => h.NodeId,
c => c.ChildId,
(h, c) => new { FluxoHierarchy = h, c.ParentId, c.Depth }
)
.Where(x => x.FluxoHierarchy.FluxoId == idFluxo && x.Depth == 1)
.ToList(); // Cannot implicitly convert type...
}
转到正确将数据返回给客户端?
是逐项迭代和逐项复制吗?
self.textbox.setText(SomeMethod(arg1,arg2)) #numpyarray
答案 0 :(得分:3)
尝试投射到您的具体类型,而不是匿名类型。
(h, c) => new FluxoHierarchyOutput { FluxoHierarchy = h, c.ParentId, c.Depth }
你可能需要Select
在某处,可能就在ToList()
电话之前。否则,您的结果将是整个联接。
答案 1 :(得分:3)
流畅的API对于连接来说并不是最漂亮的。使用查询语法也是一样的。您完全避免在select之前指定中间结果。
return (
from h in _context.FluxoHierarchy
join c in _context.FluxoClosure on h.NodeId equals c.ChildId
where h.FluxoId == idFluxo && c.Depth == 1
select new FluxoHierarchyOutput {
FluxoHierarchy = h,
ParentId = c.ParentId
}).ToList();
答案 2 :(得分:2)
如果没有Select
,您的查询将返回一个匿名对象,然后必须将其转换为您的实际返回类型。错误消息告诉您,此转换不能隐含。在查询末尾添加Select
即可。
return _context.FluxoHierarchy
.Join(
_context.FluxoClosure,
h => h.NodeId,
c => c.ChildId,
(h, c) => new { FluxoHierarchy = h, c.ParentId, c.Depth }
)
.Where(x => x.FluxoHierarchy.FluxoId == idFluxo && x.Depth == 1)
.Select(s => new FluxoHierarchyOutput {
FluxoHierarchy = s.FluxoHierarchy,
ParentId = s.ParentId,
//Add all the fields you want.
})
.ToList();
您在Join
中遇到的问题与Robert Harvey解释的相同。