один ко многим присоединиться - взять только последний из многих - PullRequest
0 голосов
/ 04 октября 2010

Я довольно новичок в EF, поэтому извините, если на мой вопрос уже был дан ответ ... Я просто не могу понять синтаксис ..

У меня есть две сущности, Category & Product, где в одной категории много товаров.

Я хочу получить все категории только с их последним продуктом (у него есть свойство даты с именем timestamp)

Понятия не имею, как это сделать. : - /

Если возможно, я хотел бы знать синтаксис двух способов его написания: и sql-подобный синтаксис, и C # как синтаксис, например

ctx.Categories.Include("Products").ToList() 

from c in ctx.Categories.Include("Products")

Спасибо!

1 Ответ

1 голос
/ 04 октября 2010

Вот SQL-подобный способ:

var categories =
        from p in products
        group p by p.Category into g
        select new { Category = g.TheKey, LatestProduct = g.Max(p => p.TimeStamp) };

Это лямбда-путь (предупреждение, не проверено):

var categories = products.GroupBy(p => p.Category)
                         .Select(g => new { Category = g.TheKey, 
                                            LatestProduct = g.Max(p => p.TimeStamp)});

Примечание на Categories.Include("Products"), вы неЭто не нужно в вашем примере.Вы используете «Включить» для быстрой загрузки, так что, например, если у вас был список категорий, возвращенных из EF, при выполнении Categories.Product вы получите соответствующий продукт.

Но все, что вам нужно, этосписок категорий и отдельный продукт для каждой из них - который уже возвращен в приведенном выше запросе LINQ, поэтому нет необходимости включать.

...