问题
my three table structure are :
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
Using the above table i need a select query to select several fields .but how ?
query = this.Context.tblUserInfos
.Where(p => p.Status == 1)
.Select(p => new { p.tblUserType.UserTypeID,p.tblUserType.UserType,});
return query;
above LINQ query works well ,but here i need to select UserRoleID from tblUserRole table , and PageName from tblPageInfo table .What to write on above query to select those fields.
回答1:
Just like in SQL you will want to use a join. So something like
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};
I wasn't quite able to parse what you were trying to join on from each table, but that should get you started.
Edit
I think I may have gotten my syntax confused.
Straight up Labmda Version
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});
I haven't tested that, but I think that's correct.
来源:https://stackoverflow.com/questions/3326092/how-to-select-values-from-several-tables