附加到查询的“选择”部分

时间:2017-05-05 13:09:41

标签: c# sql linq

我们有一个LINQ METHOD语法查询的重复部分。这是一个人为的例子。

    IQueryable<orders> query  = _context.Set<orders>();

    var result = query.Select(p => new{
        REMAINING = p.qtyOrdered + p.alreadysent,
        AWATING = p.qtyOrdered + p.alreadysent          
    }).ToList();

因此,我们尝试通过在方法中放置一些内容然后调用它并获得某种结果来解决重复部分。就这样......

    private IQueryable WhatsLeft()
    {
        IQueryable<orders> query  = _context.Set<orders>();
        return query.Select(p => new{p.qtyOrdered + p.alreadysent});
    }

    IQueryable<orders> query  = _context.Set<orders>();

    var result = query.Select(p => new{
        REMAINING = WhatsLeft(),
        AWATING = WhatsLeft()           
    }).ToList();

这一切都是可能的吗?如果有的话,任何人都可以给我一些关于如何实现这一目标的简短建议。

1 个答案:

答案 0 :(得分:1)

难道你不能直接将Order对象直接传递给新函数吗?

private int Total(int left, int right)
{
  return left + right;
}

如果我理解你正确的事情。我不记得Linq to sql等可以处理函数,将它们解释为SQL函数。也许你可以尝试一下。

或者,为了降低函数的复杂性(以便于L2S转换),您可以在函数上细化参数,例如:

var result = query.Select(p => new{
  REMAINING = Total(p.qtyOrdered, p.alreadysent),
  AWATING = Total(p.qtyOrdered, p.alreadysent)
}).ToList();

然后拨打电话更像:

var result = query.Select(c => c.qtyOrdered + c.alreadysent).Select(p => new {
  REMAINING = p,
  AWAITING = p
}).ToList();

<强>更新

您是否考虑过提前查询计算?

Fragment