Применение условия к требованию активной загрузки (включения) в Linq для объектов - PullRequest
0 голосов
/ 26 июля 2010

У меня есть таблица Product. Продукт связан с ProductDescription в отношениях один ко многим. ProductDescription может иметь более одной строки для каждого продукта. Он будет иметь несколько строк, если есть несколько переводов для описания продукта. Продукт имеет много-к-одному отношения с языком. Язык имеет код языка (en, es и т. Д.), А также LanguageId (также можно найти в ProductDescription).

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

У меня есть время, когда я выполняю это в Линке для сущностей. Я хочу сгенерировать SQL следующим образом:

SELECT * FROM Product p
JOIN ProductDescription pd ON p.ProductId = pd.ProductId
JOIN (SELECT * FROM Language WHERE AlternateCode = 'es') AS l ON pd.LanguageId = l.LanguageId

(AlternateCode - это имя поля для кода языка)

Кто-нибудь знает, как это сделать? То, что у меня осталось сейчас, - это потянуть все языки, а затем отфильтровать их с помощью Linq to Objects, что наверняка не идеально. Я мог бы получить языковые коды для каждого продукта в цикле, но для этого потребовалось бы многократные обращения SQL, которые я тоже не хочу.

ценю любую помощь!

1 Ответ

0 голосов
/ 26 июля 2010

Используйте проекцию , не стремясь к загрузке.

var q = from p in Context.Product
        select new ProductPresentation
        {
           Id = p.Id,
           // etc.
           Description = new ProductDescriptionPresentation
           {
               Language = (from l in p.ProductDescription.Languages
                           where l.AlternateCode.Equals("es", StringComparison.OrdinalIgnoreCase)
                           select l).FirstOrDefault(),
               // etc.
           }
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...