mvc4 lambda:向对象模型添加单独的查询?

Posted

技术标签:

【中文标题】mvc4 lambda:向对象模型添加单独的查询?【英文标题】:mvc4 lambda: Add separate query to object model? 【发布时间】:2013-07-08 21:51:52 【问题描述】:

我有一个查询可以获取有关工作的信息:

    var jobs = db.jobs.Include(d => d.docs)
                      .Where(o => o.officeid == 2);
    return View(jobs.ToList());

这很好用,但是我还必须以某种方式添加以下查询,以便我可以在 .cshtml 页面上打印额外的“字数”值列。

    SELECT SUM(docs.words) FROM docs 
    LEFT OUTER JOIN reviewer ON docs.reviewerid = reviewer.reviewerid 
    WHERE docs.docid = 1111 AND reveiwer.type = 'student'

因此,简而言之,第一个 lambda 查询中的所有作业数据都需要在表格中打印出来......但是,最后一个查询需要转换为 lambda 形式并与原始 lambda 查询相结合,所以将每个文档的字数添加到作业对象模型中。

这是我拥有的,但它不起作用:

    var jobs = db.jobs.Include(d => d.docs)
                      .Include(r => r.docs)
                      .Sum(s => s.docs.words)
                      .Where(o => o.officeid == 2);
    return View(jobs.ToList());

请问这样做的正确方法是什么?非常感谢!

【问题讨论】:

这太令人沮丧了,所以我只是使用 linq 的 join 关键字手动连接了所有表。对于“字数”部分,我重新使用了表中已有的一列并临时覆盖了它的值,以便我可以显示它们而无需向对象添加额外的列。不是一个好的解决方案,但它有效。感谢大家阅读。 【参考方案1】:

也许可以试试这样的:

public class Job

    public List<Doc> Docs;


public class Doc

    public int Words;


List<Job> Jobs = new List<Job>  
    new Job  Docs = new List<Doc>  new Doc  Words = 5 , new Doc  Words = 10  , 
    new Job  Docs = new List<Doc>  new Doc  Words = 5   
;

var res = Jobs.Select(x => new  Jobs = x, Cnt = x.Docs.Sum(y => y.Words) );

并创建一个包含作业及其字数的 ViewModel 以发送到您的视图而不是对象列表。

【讨论】:

以上是关于mvc4 lambda:向对象模型添加单独的查询?的主要内容,如果未能解决你的问题,请参考以下文章

从模型中的嵌套对象获取 MVC4/Razor 中 JavaScript 的元素 id

部分补充翻译转载官方教程Asp.Net MVC4入门指南:添加一个模型

向 Laravel 模型查询添加计算字段

视图中的 MVC4 模型问题:在调试模式下模型缺少详细信息

跨单独的 RDD 对象应用 lambda 函数

MVC 4 - 在哪里保留业务逻辑