我试图在加载一些数据时选择多个子项,但我想在包含项周围放置条件语句。
目前,我有许多不同的选择以不同的方法处理 1 个特定的祖 parent 对象,但我想将它们放入一个选择中
ShapeResults(this IQueryable<SpecificObject>, bool includeParent, bool includeChildren)
方法和我所有的方法都指向带有条件/过滤器的方法。
我在做什么并且效果很好:
var query = context.Grandparent.Select(i => new GrandparentObject
{
GrandparentProp1 = i.GrandparentProp1 ,
Parents = i.Parents.Select(j => new ParentObject
{
ParentProp1 = j.ParentProp1,
Children = j.Children.Select(k => new ChildObject
{
ChildProp1 = k.ChildProp1,
}
}
}
我本质上想做什么
var query = context.Grandparent.Select(i => new GrandparentObject
{
GrandparentProp1 = i.GrandparentProp1,
--> if (IncludeParents)
Parents = i.Parents.Select(j => new ParentObject
{
ParentProp1 = j.ParentProp1,
--> if (IncludeParentsChildren)
Children = j.Children.Select(k => new ChildObject
{
ChildProp1 = k.ChildProp1,
}
}
}
提前致谢!
最佳答案
如何使用 the conditional operator像这样?
var query = context.Grandparent.Select(i => new GrandparentObject
{
GrandparentProp1 = i.GrandparentProp1,
Parents = includeParents
? i.Parents.Select(j => new ParentObject
{
ParentProp1 = j.ParentProp1,
Children = includeChildren
? j.Children.Select(k => new ChildObject
{
ChildProp1 = k.ChildProp1
}
: Enumerable.Empty<Child>()
}
: Enumerable.Empty<Parent>()
};
你也可以使用 null
代替 Enumerable.Empty<TResult>()
,这取决于您希望返回结果的语义是什么。
编辑: 刚刚意识到我完全想多了这需要多么复杂。像这样尝试:
var query = context.Grandparent.Select(i => new GrandparentObject
{
GrandparentProp1 = i.GrandparentProp1 ,
Parents = i.Parents
.Where(_ => includeParents)
.Select(j => new ParentObject
{
ParentProp1 = j.ParentProp1,
Children = j.Children
.Where(_ => includeChildren)
.Select(k => new ChildObject
{
ChildProp1 = k.ChildProp1,
}
}
}
关于c# - 条件 IQueryable 选择 (MVC .NET EF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098807/