2010-03-06 53 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,這與我的信息庫和規範模式工作地非常好。