我应该使用哪种加入方式? [EF4.0代码优先]

时间:2015-09-04 20:28:34

标签: mysql entity-framework linq asp.net-mvc-4

我为糟糕的话题标题道歉,因为我有点迷失在这里应该做什么。

首先,这是我的数据库表设计,我希望在继续之前收到某种反馈:

我正在尝试制作一个注册网络应用程序。

受试者

subject
[id] [subj]   [professor]  [cstart]  [cend]  [days]  [count] [units]
1   comalgo    carl        10:00am  12:30pm  M-W      40      3.0
2   compasm    carl        01:00pm  02:30pm  T-TH     40      3.0
3   compro     miguel      04:30pm  06:30pm  M-W      35      3.0
4   pro5       fua         03:30pm  05:30pm  T-TH     30      3.0
5   pro5       fua         06:30pm  08:30pm  F        10      3.0

学生

students
[id] [fname]   [lname]   [bday]       [unitsleft]  [unitstaken] [major]
 1    carlos    doe      11/20/1990      100           0         BS-COMPUTER SCIENCE
 2    miguel    doe      08/15/1992      100           0         BS-ECONOMY
 3    carl      doe      12/12/1991      100           0         BS-PSYCHOLOGY
 4    test      doe      02/12/1992      100           0         BS-LITERATURE

我打算做的是,主题将通过一系列列表呈现,学生将选择多个科目并注册。登记的总单位不应该大于20且小于11.我已经实施了该部分,我现在正在处理所选科目的存储。

以下是我提出的解决方案,我希望收到一些有关它的反馈,以及我应该使用哪些操作。

我将为所有已登记的科目设立一个集中的表格

注册科目

selected subject
[id] [subjid] [studentid] [status]
1       1        1           P     //comalgo enrolled by carlos, P is for pending grade
2       1        2           P     //comalgo enrolled by miguel  P is for pending grade
3       2        1           P     //compasm enrolled by carlos  P is for pending grade

我计划发生的事情是:我有一个学生的个人资料页面,他们将能够专门为自己查看/编辑他们当前注册的科目(基于ID)

我希望它们能够显示以下表格标题,这些标题基于已登记的主题:

[subj] [professor] [cstart] [cend] [days]

以下是我的问题的简要总结:

1。)我的桌子好吗?或者这是一个糟糕的设计?   2.)我应该使用什么样的方法?我正在尝试研究它(加入),但我有点困惑,需要澄清。我想向用户展示他们选择的科目。

编辑:我想我可以做一些事情......从enrolled subjects中选择id = x然后获取subject id,但我不确定是否会高效。

2 个答案:

答案 0 :(得分:0)

你的桌子看起来很好(即第三范式)。 INNER联接将执行

SELECT
    B.subj, B.professor, B.cstart, B.cend, B.days
FROM
    selectedsubjects A
    INNER JOIN subjects B ON A.subjid = B.id
WHERE
    A.studentid = 1

P.S。这看起来像是学校的作业或书中的东西......?

答案 1 :(得分:0)

可能是:

var query =  context.EnrolledSubjects
   .Include("Subject")
   .Where(i => i.StudentId == 1)
   .Select(i => new {
      i.Subject.Subj,
      i.Subject.Professor,
      i.Subject.CsStart,
      i.Subject.Send,
      i.Subject.Days,
      i.Status
};