EF code first Query madness с помощью include.select - PullRequest
0 голосов
/ 19 января 2012

У меня большая борьба с linq. У меня есть веб-страница и зональная сущность

в моем хранилище веб-страниц. У меня есть метод с именем: GetPageByTitle

здесь я хочу выбрать страницу по названиюи верни это.я пытаюсь сделать это следующим образом:

public WebPage GetPageByTitle(string title,string cultureName)
    {
        try
        {

            var entity =
                (from p in GetAll().Include(x => x.Site).Include(x => x.Menu)
                 from c in p.ZoneContents
                 where c.Language.CultureName == cultureName && c.PageTitle == title
                 select new
                            {
                                page = p,
                                zone = c
                            }).SingleOrDefault();

        }
        catch (InvalidOperationException)
        {
            throw new ArgumentException("There are no visiblepages with the provided title and language");
        }
        catch (Exception ex)
        {
            throw new ArgumentException(ex.Message);
        }
    }

теперь у меня есть тип {Webpage, ZoneContent} и я не могу быть возвращен на веб-страницу Как я могу сделать шаг вперед, чтобы объединить их в веб-страницу?

Кто-нибудь идея ??

Большое спасибо

1 Ответ

0 голосов
/ 19 января 2012

Вы можете попробовать это так:

  • Вам не нужно проецировать в анонимный тип, если вы хотите только WebPage.Просто выберите только p.

  • Если нет результата, вы не получите исключение.SingleOrDefault вернет либо сущность, либо null.Так что просто проверьте null после запроса.

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

.

public WebPage GetPageByTitle(string title,string cultureName)
{
    var webPage =
        (from p in GetAll().Include(x => x.Site).Include(x => x.Menu)
         where p.ZoneContents.Any(c => c.Language.CultureName == cultureName
                                    && c.PageTitle == title)
         select p)
        .SingleOrDefault();

    if (webPage == null)
        throw new ArgumentException(
            "There are no visiblepages with the provided title and language");

    return webPage;
}
...