2010-09-23 65 views
0

我在一個項目上使用LinqToSql,而Ria服務將它作爲IQueryable公開。 我想給我的產品表,其子表(例如ProductStatus,產品分類)子表加載LinqToSql和RIA服務

沿要做到這一點,我現在用的是標準

public IQueryable ProductSelect() {

DataLoadOptions loadOpts = new DataLoadOptions(); 
loadOpts.LoadWith<Product>(p => p.ProductStatus); 
loadOpts.LoadWith<Product>(p => p.ProductCategory); 
this.DataContext.LoadOptions = loadOpts; 

return this.DataContext.Products; } 

不幸的是,這是創建內部聯接,沒有離開加盟。在表上沒有參照完整性(我無法將其添加進去)。

這意味着如果子表中沒有匹配的記錄,則不會選擇該產品。 有誰知道如何改變這是一個左連接?

回答

0

找到了答案。在我有表和關聯的DBML文件中。它與外鍵Ids有關。

如果外鍵不可爲空,則它進行內連接。 如果您將該字段設置爲空,那麼它將執行左連接。

0

如何查詢下面的內容?它會給你一個由3個屬性組成的匿名類型。當「左連接」產生空值時,其中一些將爲空。

var products= 
     from p in db.Products 
     from pc 
     in db.ProductCategory 
      .Where(x => x.Id == p.ProductCategoryId) 
      .DefaultIfEmpty() 
     from ps 
     in db.ProductStatus 
      .Where(x => x.Id == p.ProductStatusId) 
      .DefaultIfEmpty() 
     select new { Product = p, ProductCategory = pc, ProductStatus = ps} 
+0

@大衛,希望這會有所幫助! – 2010-09-23 02:43:10