2017-06-29 81 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();