2012-01-18 3 views
0

У меня есть большой бой с я LINQ есть веб-страницу и zonecontent объектEF код первого запроса сумасшествие с include.select

в моем хранилище веб-страницы У меня есть метод, называемый: 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} и не могут быть возвращены в веб-страницы Как я могу пойти на шаг дальше, чтобы объединить их в веб-страницу?

Любая идея?

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

ответ

0

Вы могли бы попробовать это так:

  • Вам не нужно проецировать в анонимный тип, если вы хотите только 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; 
} 
+1

Утверждения 'Include' игнорируются при присоединении. – Eranga

+0

@Eranga: Верно, спасибо! Я пробовал новую версию. Я понятия не имею, могу ли я выразить это без методов расширения и лямбда. – Slauma

Смежные вопросы