2017-06-29 75 views
0

我正在嘗試將關係數據庫合併到我的項目中。 RDBMS的在我的項目實施之前,一般情況下我通常能夠通過這個代碼來訪問我的理想值:如何使用asp.net實體框架在sql外鍵中獲取數據?

public static string guitar { get; set; } 
public static List<stringInstrumentItem> GetGuitarItems() 
{ 
    List<stringInstrumentItem> list2 = new List<stringInstrumentItem>(); 

     MusicStoreDBEntities obj2 = new MusicStoreDBEntities(); 
     list2 = (from g in obj2.stringInstrumentItems where g.brand == guitar select g).ToList(); 


    return list2; 

} 

但現在,我已經設置在我的SQL腳本外鍵,g.brand是不工作,因爲它不再包含文本值,它現在是一個名爲brandId的int。爲了更好地理解我的問題,以下是stringInstrumentItem表的sql腳本。這是我設置引用品牌表和主鍵的外鍵brandId的地方。

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[stringInstrumentItem](
[itemId] [int] NOT NULL, 
[type] [varchar](50) NOT NULL, 
[brandId] [int] FOREIGN KEY REFERENCES brand(brandId), 
[model] [varchar](50) NOT NULL, 
[price] [float] NOT NULL, 
[itemimage1] [varchar](255) NULL, 
[itemimage2] [varchar](255) NULL, 
[description] [text] NOT NULL, 
[necktype] [varchar](100) NOT NULL, 
[body] [varchar](100) NOT NULL, 
[fretboard] [varchar](100) NOT NULL, 
[fret] [varchar](50) NOT NULL, 
[bridge] [varchar](100) NOT NULL, 
[neckpickup] [varchar](100) NOT NULL, 
[bridgepickup] [varchar](100) NOT NULL, 
[hardwarecolor] [varchar](50) NOT NULL, 
PRIMARY KEY CLUSTERED 
(
[itemId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = 
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO 

現在這裏是品牌表。這是stringInstrumentItem所指的表。

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[brand](
[brandId] [int] NOT NULL, 
[type] [varchar](50) NOT NULL, 
[name] [varchar](50) NOT NULL, 
[image] [varchar](255) NULL, 
PRIMARY KEY CLUSTERED 
(
[brandId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = 
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO 

我的目標是能夠訪問一個域名爲名稱的品牌表通過stringInstrumentItem表使用asp.net和實體框架的價值。我沒有真正找到答案。我希望你們能幫助我解決這個問題。

+1

最簡單的方法是做的兩個步驟。首先獲取id,然後找到具有該id的對象。 – pijemcolu

回答

1

如果您在MusicStoreDBEntities中的這兩者之間有適當的關係,則應該能夠訪問品牌名稱,如g.brand.name

list2 = (from g in obj2.stringInstrumentItems 
     where g.brand.name == guitar select g).ToList(); 
        ^^^^^^ 

否則,您必須手動加入他們這樣的 -

list2 = (from g in obj2.stringInstrumentItems 
     join b in obj2.brand 
     on g.brandId equals b.brandId 
     where b.name == guitar 
     select g).ToList(); 
+0

你的權利,g.brand.name確實有效。真棒! – RockStar

+0

如何以這種格式「SELECT COUNT(*)FROM stringInstrumentItem WHERE brandId LIKE @brand」???我將如何通過stringInstrumentItem以這種格式在品牌表中獲取名爲字段的字段??? – RockStar

+0

您可以使用'.Count()'而不是'.ToList()'。 Count返回整數值。 – Win

0

試試這個:

list2 = MusicStoreDBEntities.stringInstrumentItem. 
Where(x=> x.brand.name == "guitar").Select(x=> x).ToList();