簡體   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