我正在查询实体框架模型,所以在这种情况下,我使用LINQ到实体。它只是意味着我不能使用所有最新的操作符。
下面是LINQ select语句:
var nodes = r.Find(pn =>
pn.StatusId == PageStatus.Active &&
pn.IncludeInSitemap &&
sitemap.Contains(pn.PageTemplate.SiteSectionId))
.Select(x => new
{
x.PageTemplate.RouteName,
x.RouteValues,
x.PageTemplate.PhysicalFile,
MetaLastModified = x.PageMeta.LastModified,
ContentBlock = x.PageContent != null
? x.PageContent.ContentBlock
: default,
ContentLastModified = x.PageContent != null
? x.PageContent.LastModified
: default,
x.PageType.Priority
})
.OrderByDescending(x => x.Priority)
.ThenBy(x => x.RouteName)
.ToList();
如您所见,我有两个属性需要检查PageContent是否为空。我不能使用"?操作符,因为它是对实体的LINQ。然而,我想知道是否有可能对父节点进行一次NULL检查(而不是两次),并相应地设置两个属性。
LINQ对我来说有点陌生,所以它可能是一个非常简单的答案,也可能是不可能的。
欢迎指教。
是这样的?
.Select(x => new
{
x.PageTemplate.RouteName,
x.RouteValues,
x.PageTemplate.PhysicalFile,
MetaLastModified = x.PageMeta.LastModified,
PageContent = x.PageContent
x.PageType.Priority
})
.Select(anonymousClass =>
anonymousClass.PageContent is PageContentType pg ?
new { ... } :
new {})
如果我们用一个真实的类替换匿名类…然后构造函数可以进行一次性测试,以确保推导出的属性被正确设置…