LINQ。包含()

时间:2015-01-22 14:33:05

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

Tables

我正在尝试编写一些LINQ来加入这些表,但它给了我错误。这是我的代码

public PartialViewResult Getjobs(int id)
{
    using (var db = new MTEntities())
    {
        var jobs = db.jobs.Include(j => j.jobslist)
            .Include(jl => jl.jobslist.model_jobslist
            .Where(aa=>aa.jobslist.JobsListID==jl.jobslist.model_jobslist.JobsListID))
            .Where(bki => bki.BookingID==id)
            .ToList();

        if (jobs != null)
        {
            return PartialView("_JobDetails", jobs);
        }

我正在尝试从model_joblist表中显示传入预订ID的大致时间。

<th>
    @Html.DisplayNameFor(model =>model.jobslist.model_jobslist.ApproxTime))
</th>

这可能吗?

  

错误5'System.Collections.Generic.ICollection'不包含'JobsListID'的定义,并且没有可以找到接受类型'System.Collections.Generic.ICollection'的第一个参数的扩展方法'JobsListID'(是你错过了using指令或程序集引用?)Controllers \ BookingController.cs 90 97 MechanicTracker    这就是错误

1 个答案:

答案 0 :(得分:2)

这里有多个错误。首先,我建议查找include包含不用于连接。您根本不需要它来使查询起作用,但出于性能原因它会很有用。

其次,传递到_JobDetails的作业将属于List<job>类型,因此@Html.DisplayNameFor(model =>model.jobslist.model_jobslist.ApproxTime))是错误的。

第三,如果要显示近似值,则需要@Html.DisplayFor而不是@Html.DisplayNameFor。但是,由于代码片段位于第th个元素中,您可能确实需要DisplayNameFor,并且您根本没有发布相关的代码。

要创建查询,您只需使用:

var jobs = db.jobs.Where(bki => bki.BookingID==id).ToList();

如果您需要它们以提高性能,请稍后再添加Include。请参阅答案末尾的链接以获取相关帮助。

然后显示它将取决于你想要什么。你将有一份工作清单,所以它可能是这样的:

foreach (var job in Model) {
    ...Some HTML...
    job.jobslist.model_jobslist.ApproxTime.ToString("whatever date format you want")
    ...Some more HTML...
}

一些有用的链接:

Date and time formats

How to use the include statement

How to use the join statement