Доступ к включенному объекту - PullRequest
0 голосов
/ 08 декабря 2011

Я работаю с новым проектом ASP.NET MVC3, и мне кажется, что мне что-то не хватает в моих навыках LINQ.

Я форматирую данные для "вызова" Json, который будет использоваться в моем jqGrid.

Работает нормально, но теперь я хочу добавить связанный объект с помощью выражения 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?

1 Ответ

1 голос
/ 08 декабря 2011

Проблема в том, что вы сначала выбираете анонимный объект со свойствами 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...