我需要实现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查询中结束吗?
答案 0 :(得分:1)
这实际上取决于LINQ to SQL是否理解Tuple.Create
的要点。我怀疑它在.NET 4.0中的作用 - 但唯一可以找到的方法是尝试它。
它确实使概念感觉,并且可组合性是LINQ目标的一部分 - 这就是为什么我希望它得到支持。实际上它就像使用匿名类型一样,除了你从方法中“导出”类型信息,这是Tuple
的重点。