加入后加入

时间:2018-01-25 20:06:21

标签: c# asp.net-core entity-framework-core

我需要在通过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

3 个答案:

答案 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解释的相同。