2010-03-06 54 views
1

我有2个对象 - 订单和产品。在订单上,只有productID被保存,当我查看订单时,我想查看产品名称。根据ScuttGu的博客,这很容易通过使用带有Eval的模板字段(“Product.ProductName”)来完成。但是,在查看实际查询时,我发现每个订单都有一个单独的查询。外键导致更多的查询?

它不适合我,因为对于许多行和/或外键许多额外的查询将被做出。它不会使整体效率太低(即linq为什么不使用连接)?

感谢

回答

0

这是因为在那个评估和演示了运行点,查询已经拥有,不说加入。

当你取你可以使用DataLoadOptions查询到包括该使用.LoadWith() method

var dlo = new DataLoadOptions(); 
dlo.LoadWith<Order>(o => o.Product); 
var dc = new DataContext(); 
dc.LoadOptions = dlo; 

var orders = from dc.Orders select o; 
1

那是因为你的产品是懒惰加载 - 也就是在需要的时候,他们被加载。

可以DataLoadOptions设置你的fetchingstrategy,并与您的订单加载产品:

MyDataContext db = new MyDataContext(); 
DataLoadOptions options = new DataLoadOptions(); 
options.LoadWith<Order>(order => order.Product); 
db.LoadOptions = options; 
var orders = from c in db.Orders 

如果你不喜欢的PR。 loadoptions的DataContext的规范,你做这样的事情(不testet):

MyDataContext db = new MyDataContext(); 
db.Orders 
    .Select(o => new { Order = o, Products = o.Products}) 
    .ToList() 
    .Select(x => x.Order) 
    .ToList(); 

我已经实现了类似this guys fethingstrategies,这与我的信息库和规范模式工作地非常好。