2017-07-24 69 views
1

第一次使用LinqtoSQL。所以,給你們一些背景:LinqtoSQL從其他表獲取值

我有一個名爲庫存具有以下字段一個簡​​單的SQL Server表

  • InventoryID(INT)(自動增量)
  • InventoryItemName(VARCHAR)(255)
  • InventoryCategory(INT)

接下來我有具有以下字段的另一個表名爲InventoryCategories:

  • InventoryCategoryID(INT)(自動遞增)
  • InventoryCategoryName(VARCHAR)(255)
  • InventoryCategoryDe​​scription(VARCHAR)(255)

接着,目前我有其選擇哪個查詢的組合框要更新DataGrid.ItemSource,其代碼fo如下所示

if (searchcategory == "All Stock") 
     { 
      InventoryDataContext dc = new InventoryDataContext(); 

      var q = 
        from a in dc.GetTable<Inventory>() 
        select a; 

        SearchResults.ItemsSource = q; 
     } 

現在,此結果將返回帶有列的Inventory整個表InventoryID,InventoryItemName和InventoryCategory。但是,它返回InventoryCategory列中的InventoryCategory的ID號。

任何人都可以幫助我在Inventory查詢中從InventoryCategories表中獲取InventoryCategoryName而不是ID嗎?這將需要什麼?

+0

您將需要加入的'InventoryCategoryID'兩個表,並選擇一個新的鍵入(可能是匿名),在其中選擇名稱而不是完整的「庫存」對象。建議您製作一個適合您的視圖。然後,您可以簡單地查詢 –

+0

請檢查文章,https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/join-clause。左外部連接應該適合你的任務 – ASpirin

+0

你想爲所選InventoryID的InventoryCategoryName? – QweRty

回答

1

嘗試使用左連接:

var qry = from inv in context.Inventory 
      from invCategory in context.InventoryCategories.Where(u => inv.InventoryCategory == u.InventoryCategoryID).DefaultIfEmpty() 
      select new myViewModel {id = invCategory.InventoryCategoryID, categoryName = invCategory .InventoryCategoryName } 

,不要忘記創造myViewModel類idcategoryName性能

+0

這使我在正確的道路上!現在它工作:),也設法使用這個創建多個左連接!謝謝古斯蒂! – Exxili

+0

@Exxili很好,很高興爲您提供幫助 –

相關問題