2010-07-24 82 views
0
選擇值

我的三個表的結構是:使用如何從幾個表

USE [DB_OrderV2] 
GO 

/****** Object: Table [dbo].[tblPageInfo] Script Date: 07/24/2010 23:16:18 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[tblPageInfo](
    [Code] [int] IDENTITY(1,1) NOT NULL, 
    [PageID] [smallint] NOT NULL, 
    [PageName] [nvarchar](80) NOT NULL, 
    [Description] [nvarchar](80) NOT NULL, 
    [Status] [tinyint] NOT NULL, 
    [CreateUserID] [smallint] NULL, 
    [CreateDate] [smalldatetime] NULL, 
    [UpdateUserID] [smallint] NULL, 
    [UpdateDate] [smalldatetime] NULL, 
CONSTRAINT [PK_tblPageInfo] PRIMARY KEY CLUSTERED 
(
    [PageID] 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 


USE [DB_OrderV2] 
GO 

/****** Object: Table [dbo].[tblUserType] Script Date: 07/24/2010 23:17:42 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[tblUserType](
    [Code] [int] IDENTITY(1,1) NOT NULL, 
    [UserTypeID] [smallint] NOT NULL, 
    [UserType] [nvarchar](50) NOT NULL, 
    [Status] [tinyint] NULL, 
    [CreateUserID] [smallint] NULL, 
    [CreateDate] [smalldatetime] NULL, 
    [UpdateUserID] [smallint] NULL, 
    [UpdateDate] [smalldatetime] NULL, 
CONSTRAINT [PK_tblUserType] PRIMARY KEY CLUSTERED 
(
    [UserTypeID] 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 


USE [DB_OrderV2] 
GO 

/****** Object: Table [dbo].[tblUserInfo] Script Date: 07/24/2010 23:18:33 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[tblUserInfo](
    [Code] [int] IDENTITY(1,1) NOT NULL, 
    [UserID] [smallint] NOT NULL, 
    [UserName] [nvarchar](50) NOT NULL, 
    [LoginName] [nvarchar](50) NOT NULL, 
    [Password] [nvarchar](50) NOT NULL, 
    [UserTypeID] [smallint] NOT NULL, 
    [Status] [tinyint] NOT NULL, 
    [ActiveDate] [datetime] NULL, 
    [CreateUserID] [smallint] NULL, 
    [CreateDate] [smalldatetime] NULL, 
    [UpdateUserID] [smallint] NULL, 
    [UpdateDate] [smalldatetime] NULL, 
CONSTRAINT [PK_tblUserInfo_1] PRIMARY KEY CLUSTERED 
(
    [UserID] 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 

上表中我需要一個選擇查詢,選擇若干領域。但是怎麼樣?

query = this.Context.tblUserInfos 
       .Where(p => p.Status == 1) 
       .Select(p => new { p.tblUserType.UserTypeID,p.tblUserType.UserType,}); 
      return query; 

上述LINQ查詢效果很好,但在這裏我需要從tblUserRole表,頁面名稱tblPageInfo表中選擇UserRoleID。什麼寫在上面的查詢選擇那些領域。

回答

0

就像在SQL中,你會想要使用連接。所以像

query = from p in Context.tblUserInfos 
     join u in Context.tblUserRole Where p.UserRoleID equals u.UserRoleID 
     join n in context.tblPageInfo where p.PageName equals n.PageName 
     where p.Status == 1 
     select new {p.tblUserType.UserTypeId, p.tblUserType.UserType, u.UserRoleId, n.PageName}; 

我不能很好地解析你想從每張表上加入,但這應該讓你開始。

編輯

我想我可能已經得到了我的語法困惑。

直線上升Labmda版本

query = Context.tblUserInfos 
     .Join(Context.tblUserRole, info => info.UserRoleID, user => user.UserRoleID, (info, user) => new {Info = info, User = user}) 
     .Join(Context.tblPageInfo, info2 => info2.PageName, name => name.PageName, (info2, name) => new {Info2 = info2, Name = name}) 
     .Where(p => p.Status == 1) 
     .Select(p => new { p.tblUserType.UserTypeID,p.tblUserType.UserType, User, Name}); 

我沒有測試過這一點,但我認爲這是正確的。

+0

我想用lamda表達式 – shamim 2010-07-24 17:37:56

+1

任何具體原因?如果你不熟悉它們,加入Lambda有點困惑 – msarchet 2010-07-24 17:40:08