【发布时间】:2014-03-25 10:43:49
【问题描述】:
我有三个表 Exam、Test 和 UserTest。
CREATE TABLE [dbo].[Exam] (
[ExamId] INT IDENTITY (1, 1) NOT NULL,
[SubjectId] INT NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
[Description] NVARCHAR (MAX) NOT NULL,
CONSTRAINT [PK_Exam] PRIMARY KEY CLUSTERED ([ExamId] ASC),
CONSTRAINT [FK_ExamSubject] FOREIGN KEY ([SubjectId]) REFERENCES [dbo].[Subject] ([SubjectId]),
CONSTRAINT [FK_Exam_ExamType] FOREIGN KEY ([ExamTypeId]) REFERENCES [dbo].[ExamType] ([ExamTypeId])
);
CREATE TABLE [dbo].[Test] (
[TestId] INT IDENTITY (1, 1) NOT NULL,
[ExamId] INT NOT NULL,
[Title] NVARCHAR (100) NULL,
[Status] INT NOT NULL,
[CreatedDate] DATETIME NOT NULL,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ([TestId] ASC),
CONSTRAINT [FK_TestExam] FOREIGN KEY ([ExamId]) REFERENCES [dbo].[Exam] ([ExamId])
);
CREATE TABLE [dbo].[UserTest] (
[UserTestId] INT IDENTITY (1, 1) NOT NULL,
[UserId] NVARCHAR (128) NOT NULL,
[TestId] INT NOT NULL,
[Result] INT NULL
CONSTRAINT [PK_UserTest] PRIMARY KEY CLUSTERED ([UserTestId] ASC),
CONSTRAINT [FK_UserTestTest] FOREIGN KEY ([TestId]) REFERENCES [dbo].[Test] ([TestId])
);
一个考试可以有许多测试,用户可以多次尝试任何测试。
如何使用扩展方法语法编写 LINQ 语句,让我看到以下 UserId == 1(我假设 UserId == 1 在 Where 子句中):
Exam Test Title UserTestID UserId Result
1 1 1a 1 1 20
1 1 1a 2 1 30
1 1 1a 3 1 40
1 2 1b 4 1 98
1 3 1c 5 1 44
2 4 2a
2 5 2b 6 1 12
或者如果 UserId == 2:
Exam Test Title UserTestID UserId Result
1 1 1a 7 2 27
1 2 1b
1 3 1c 8 2 45
2 4 2a
2 5 2b
或者如果 UserId 为 null
Exam Test Title UserTestID UserId Result
1 1 1a
1 2 1b
1 3 1c
2 4 2a
2 5 2b
请注意,由于我收到的建议,这个问题已经发生了一些变化。现在有一个赏金我希望能得到一个我可以接受的快速答案。
【问题讨论】:
-
为什么从 dbcontext 调用它很重要?
-
我首先在我的应用程序中使用实体框架代码,并且我有可用的 dbcontext。我认为这是最好的方法。
-
这对您来说很方便,但我不确定您的用户是否会关心。同样关于提供的答案,为什么您认为创建 sproc/view 而不仅仅是使用实体框架/linq 方法很重要?现在肯定有成千上万的网站解释如何从 EF 调用存储过程/视图。
-
@bENcr - 我无法找到如何使用 LINQ 执行此操作。实际上,我刚刚提出了另一个问题:stackoverflow.com/questions/22633565/… 我很难找到很多关于从 EF 调用存储过程的信息。
-
TestId 33 与结果 2 有什么关系?不应该是 75 岁吗?
标签: c# linq entity-framework