使用连接重用部分查询

时间:2009-12-12 19:15:51

标签: linq entity-framework linq-to-entities .net-4.0

我需要实现3个公共方法,这些方法都依赖于相同的初始连接。像下面描述的那样的解决方案会起作用吗?

下面的代码是一个例子,真正的东西要复杂得多,这就是我想重用它的原因。

private Tuple<Customer,Order> GetCustomerOrders()
{
    from c in customers
    join o in orders
        on c.customerid equals o.customerid
    select Tuple.Create(c, o)
}

public MyCustomerOrder GetCustomerOrder(int customerId)
{
    return (from co in GetCustomerOrders()
    where co.Item1.customerid == customerId
    select new MyCustomerOrder(co.Item1, co.Item2)).FirstOrDefault();
}

public IEnumerable<MyCustomerOrder> GetCustomerOrders()
{
    return from co in GetCustomerOrders()
    orderby co.Item1.Name
    select new MyCustomerOrder(co.Item1, co.Item2);
}

问题是,元组是否打破了查询?换句话说,这会在生成where co.Item1.customerid == customerId的SQL查询中结束吗?

1 个答案:

答案 0 :(得分:1)

这实际上取决于LINQ to SQL是否理解Tuple.Create的要点。我怀疑它在.NET 4.0中的作用 - 但唯一可以找到的方法是尝试它。

它确实使概念感觉,并且可组合性是LINQ目标的一部分 - 这就是为什么我希望它得到支持。实际上它就像使用匿名类型一样,除了你从方法中“导出”类型信息,这是Tuple的重点。