Как выбрать значения из нескольких таблиц

моя структура из трех таблиц:

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 работает хорошо, но здесь мне нужно выбрать UserRoleID из таблицы tblUserRole и PageName из таблицы tblPageInfo .Что написать в запросе выше, чтобы выбрать эти поля.


person shamim    schedule 24.07.2010    source источник


Ответы (1)


Как и в 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});

Я не проверял это, но я думаю, что это правильно.

person msarchet    schedule 24.07.2010
comment
я хочу использовать лямда-выражение - person shamim; 24.07.2010
comment
Какая-то конкретная причина? Join Lambda немного сбивает с толку, если вы не очень хорошо с ними знакомы. - person msarchet; 24.07.2010