0

クエリについて助けが必要です。エンティティのリストを返したいのですが、エンティティごとに 2 つのカウントが必要です。

これらのテーブルから生成されたエンティティを使用:

    /****** Objet :  Table [dbo].[Messages]    Date de génération du script : 03/12/2013 15:31:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DROP TABLE [dbo].[Messages]
Go
CREATE TABLE [dbo].[Messages](
    [MessageID] [int] IDENTITY(1,1) NOT NULL,
    [UserCreation] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [DateCreation] [datetime] NOT NULL  DEFAULT (getdate()),
    [UserModif] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [DateModif] [datetime] NOT NULL  DEFAULT (getdate()),
    [Timestamp] [timestamp] NOT NULL,
    [Notification] [bit] NOT NULL  DEFAULT ((0)),
    [BounceTraite] [bit] NOT NULL  DEFAULT ((0)),
 CONSTRAINT [PK_Messages] PRIMARY KEY CLUSTERED 
(
    [MessageID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
/****** Objet :  Table [dbo].[MessageLocalisations]    Date de génération du script : 03/12/2013 15:31:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
DROP TABLE [dbo].[MessageLocalisations]
Go
CREATE TABLE [dbo].[MessageLocalisations](
    [MessageID] [int] NOT NULL,
    [CodeLocalisation] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [From] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Subject] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Message] [nvarchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [TargetedAudience] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_MessageLocalisations] PRIMARY KEY CLUSTERED 
(
    [MessageID] ASC,
    [CodeLocalisation] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Objet :  Table [dbo].[MessageRecipients]    Date de génération du script : 03/12/2013 15:31:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
DROP TABLE [dbo].[MessageRecipients]
Go
CREATE TABLE [dbo].[MessageRecipients](
    [MessageID] [int] NOT NULL,
    [Recipient] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [DateRead] [datetime] NULL,
    [Email] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [Bounce] [bit] NOT NULL,
    [DateCreation] [datetime] NOT NULL,
    [DateModif] [datetime] NOT NULL ,
 CONSTRAINT [PK_MessageRecipients] PRIMARY KEY CLUSTERED 
(
    [MessageID] ASC,
    [Recipient] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO

私の例では、私のエンティティはメッセージです。受信者の数とメッセージを読んだ受信者の数が必要です:

    (From msg In context.Messages.Include("MessageLocalisations")
                         Let countRecipients = msg.MessageRecipients.Count
                         Let countRecipientsRead = msg.MessageRecipients.Where(Function(x) x.DateRead.HasValue).Count
                         Where (msg.UserCreation.Equals(user, StringComparison.OrdinalIgnoreCase))
                         Group By msg.MessageID Into Group
                         Select msg, Group).ToList()

私の例はうまくいきません。私の select ステートメントが間違っています。彼は msg を認識しません。LINQ では、Group By を使用すると、Group がどのように機能し、select がどのように機能するのかわかりません。

取得したい結果は、MessageLocalisations、各メッセージの受信者数、各メッセージを読んだ受信者数を含むメッセージのリストです。

ご協力いただきありがとうございます!SQLでは、これはとても簡単です... :(

4

1 に答える 1