2013-04-04 104 views
0

我有以下表格:插入項目到DataGrid中

enter image description here

我使用實體框架數據庫第一,因此會生成以下實體類:

public partial class Sal1 { 
    public string SaleID { get; set; } 
    public string ItemID { get; set; } 
    public int Quantity { get; set; } 
    public decimal Total { get; set; } 

    public virtual Item Item { get; set; } 
    public virtual Sale Sale { get; set; } 
} 

然後把SAL1行如下這樣的數據網格:

private List<Sal1> saleItems = new List<Sal1>(); 
... 
var query = from sa in db.Sal1 
      where sa.SaleID.Equals(tempSale) 
      select sa; 
foreach(Sal1 si in query) { 
    saleItems.Add(si);      
} 
... 
dgDetails.ItemsSource = saleItems; 

但它tu RNS出這樣的: enter image description here

我的問題是,我應該怎麼調整上面的查詢,使我得到了下面的SQL相當於:

select T0.SaleID, T0.ItemID, T1.Name, T0.Quantity, T0.Total 
from Sal1 T0 inner join Item T1 on T0.ItemID = T1.ItemID; 

在此先感謝。


編輯:我似乎已經找到了解決辦法,但我不得不這樣做:

var query = from sa in db.Sal1 
     where sa.SaleID.Equals(tempSale) 
     select new { sa.SaleID, sa.ItemID, sa.Item.Name, 
      sa.Item.Manufacturer, sa.Quantity, sa.Total }; 

我不得不改變saleItems到對象的類型。

private List<object> saleItems = new List<object>(); 

這是最好的方法嗎?

+1

還有一件事(除了我的回答和下面的評論):EF已經自動創建了一個名爲'Sal1'的類,它將數據庫表中的所有表列作爲類屬性。因此,在LINQ查詢中執行類似'select sa'的操作將返回'Sal1'對象的集合,因爲從db.Sal中的sa查詢的第一部分已經告訴LINQ關於'sa'的__type__。但是,當您執行JOIN時,您(通常)選擇屬於不同表的列,因此生成的__rows__不是特定類型。因此LINQ即時創建一個新類型。 – dotNET 2013-04-04 11:09:46

回答

1

就像SQL一樣,LINQ也支持JOIN。你可以閱讀更多關於他們的語法here。您應該相應地更改您的查詢以獲得您的結果。我沒有提供確切的答案,而是指導你更詳細的解釋,因爲它包含有價值的信息,這些信息將在未來幫助你。

+0

謝謝你,但是,我如何選擇 - 只有幾列,而不是選擇所有列?我試圖像在SQL中那樣做,但它不起作用,而是提示錯誤。 – Edwin 2013-04-04 07:50:00

+1

請參閱http://msdn.microsoft.com/en-us/library/vstudio/bb397941.aspx。在JOIN的情況下,您通常需要從多個表(實體)中選擇列,因此返回的對象通常是匿名類型的,比如您在上面發佈在EDIT部分的示例。但是,如果這種類型的對象在你的代碼中被過度使用,你可能想爲它創建一個結構或類。然後你的查詢會稍微修改一下,即不用'select new {sa.SaleID ...',你可以選擇new YourClass {sa.SaleID ...'。希望有所幫助。 – dotNET 2013-04-04 11:01:45

+0

我明白了。謝謝你的提示! – Edwin 2013-04-05 02:06:46