繁体   English   中英

访问包含的对象

[英]Accessing Included object

我正在使用新的ASP.NET MVC3项目,似乎我缺少LINQ技能。

我正在为要在jqGrid中使用的Json“调用”格式化数据。

它工作正常,但现在我想通过Linq .Include()表达式添加相关对象。 认为我最好用代码展示。

var query = db.Products.Include("Category");

var jsonData = new
{
    total = 1,  // calc
    page = page,
    records = db.Products.Count(),
    rows = query.Select(x => new { x.Id, x.Name, x.PartNr })
        .ToList()
        .Select(x => new { 
            id = x.Id,
            cell = new string[] {
                x.Id.ToString(),
                x.Name.ToString(),
                x.PartNr.ToString(),
                //x.Category.Name.ToString() 
                //This does not work but object is there.
        }}).ToArray(),
    };

    return Json(jsonData, JsonRequestBehavior.AllowGet);

问题区域=> //x.Category.Name.ToString()这里的奇怪之处是,如果我中断并观看查询( //x.Category.Name.ToString() ),我实际上可以找到附加的Category对象,但是如何,如果可以的话,我可以在我的ano方法中使用它吗?

问题是您首先要选择一个具有ID,Name和PartNr属性的匿名对象。 然后,您对数据库执行此查询(使用ToList()),然后对匿名对象列表进行新选择,并尝试访问不在匿名对象中的属性。

您应该将类​​别包括在匿名对象中,以便可以在第二选择中访问它。 或者,您应该使用第一个选择查询来选择最终结构,以便对您的数据库执行该结构。

例如,这将起作用:

rows = query.Select(x => new { x.Id, x.Name, x.PartNr, x.Category })
                    .ToList()
                    .Select(x => new
                    {
                        id = x.Id,
                        cell = new string[] {
                        x.Id.ToString(),
                        x.Name.ToString(),
                        x.PartNr.ToString(),
                        x.Category.Name.ToString()
                        }
                    }).ToArray()

或者您将查询简化为仅一个查询并针对数据库执行:

 rows = query.Select(x => new
        {
            x.Id,
            cell = new string[]
            {
                x.Id.ToString(),
                x.Name.ToString(),
                x.PartNr.ToString(),
                x.Category.Name.ToString()
            }
        }).ToArray()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM