如何修改此命令以从数据库中提取多个结果

时间:2014-07-29 23:38:54

标签: c# sql linq entity-framework asp.net-mvc-4

我使用此命令从数据库中提取记录:

CompletionsModel student = new CompletionsModel();

        try
        {
            student = db.Completions.Where(p => p.UserId == UserId).Single();
        }...

问题在于,当我需要使用UserId提取所有记录时,它会拉动(正如您所知)单个记录。最初,我将UserId设置为主键,但这当然意味着它必须是唯一的。这种限制将每个用户限制为一条完成记录(当用户完成20-30门课程时,这并没有多大帮助!)

有什么想法吗?

修改 用ToList()替换ToSingle()会导致以下错误:

  

'无法隐式转换类型   ' System.Collections.Generic.List'至   ' Blah.Models.CompletionsModel'

删除两者并简单地在.. == UserId处结束命令会引发基本相同的错误,但只是询问我是否在某个地方错过了一个演员。

编辑2:我的观点如下。

@model Blah.Models.CompletionsModel

@{
    ViewBag.Title = "Transcript";
}

<h2>@ViewBag.Title</h2>

<fieldset>
    <legend>StudentModel</legend>

    <div class="display-field">
        <table>
            <tr>
                <th>Course Title&nbsp&nbsp</th>
                <th>Course Code&nbsp&nbsp</th>
                <th>Completion Date&nbsp&nbsp</th>
            </tr>
            @try
            {
                foreach (var item in Model.PRD.CompletionsModel)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.PRD.PRD_TIT)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.PRD.PRD_NUM)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.CompletionDate)
                        </td>
                    </tr>
                }
            }
            catch
            {
                <p><font color="red" size="xlarge">No course completions found.</font></p>
            }
        </table>
    </div>
</fieldset>

1 个答案:

答案 0 :(得分:2)

你真的很亲密。除非我误解了某些内容,否则只需将Single()替换为ToList()

var students = new List<CompletionsModel>();

try
{
    students = db.Completions.Where(p => p.UserId == UserId).ToList();
}
...

那将检索具有匹配UserId的所有记录。实际上,如果您期望多个记录,那么对Single()的调用应该抛出异常......