Как мне написать этот запрос Linq to Entity? - PullRequest
0 голосов
/ 13 сентября 2009

Я новичок в Linq to Entity, поэтому я не знаю, является ли то, что я делаю, лучшим подходом.

Когда я делаю такой запрос, он компилируется, но выдает ошибку, что он не распознает метод GetItemSummaries. Похоже, это происходит потому, что ему не нравится собственный метод внутри запроса.

return (from c in _entity.Category
                from i in c.Items
                orderby c.Id, i.Id descending
                select new CategoryDto
                {
                    Id = c.Id,
                    Name =  c.Name,
                    Items = GetItemSummaries(c)
                }).ToList();

private IEnumerable<ItemSummary> GetItemSummaries(CategoryDto c)
{
    return (from i in c.Items
            select new ItemSummary
             {
               // Assignment stuff
             }).ToList();
}

Как бы я мог объединить это в один запрос, так как я не могу вызвать пользовательский метод?

Я попытался просто заменить вызов метода реальным запросом, но затем он жалуется, что ItemSummary не распознается, вместо того, чтобы жаловаться, что имя метода не распознается. Есть какой-либо способ сделать это? (Или лучше?)

Ответы [ 2 ]

2 голосов
/ 13 сентября 2009

Вы должны быть в состоянии сделать следующее:

    return (
            from c in _entity.Category
            orderby c.Id descending
            select new CategoryDto
            {
                Id = c.Id,
                Name =  c.Name,
                Items = (
                    from i in c.Items
                    order by i.Id descending
                    select new ItemSummary
                    {
                        // Assignment stuff
                    }
                )
            }).ToList();

Нужно просто убедиться, что ItemSummary общедоступен, чтобы он был видим для запроса.

Если это просто Dto, вы можете использовать тип anon, например:

                    from i in c.Items
                    order by i.Id descending
                    select new
                    {
                        Id = i.Id,
                        Name = i.Name
                    }

Это создает тип со свойствами 'Id' и 'Name'. Все зависит от того, что нужно вашему потребляющему коду:)

0 голосов
/ 13 сентября 2009

Попробуйте сделать метод GetItemSummaries методом расширения для класса Category

private static IEnumerable<ItemSummary> GetItemSummaries(this Category c)

, а затем позвоните с

select new Category
            {
                Id = c.Id,
                Name =  c.Name,
                Items = c.GetItemSummaries()
            }).ToList();

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...