EF代码首先使用include.select查询疯狂

时间:2012-01-18 22:01:11

标签: linq frameworks lambda entity code-first

我和linq发生了很大的争执 我有一个网页和一个zonecontent实体

在我的网页存储库中,我有一个名为: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);
        }
    }

现在我有一个{网页,ZoneContent}类型,无法返回到网页 如何进一步将它们组合到网页中?

有人有想法吗?

非常感谢

1 个答案:

答案 0 :(得分: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;
}