gpt4 book ai didi

c# - 条件 IQueryable 选择 (MVC .NET EF)

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:49 25 4
gpt4 key购买 nike

我试图在加载一些数据时选择多个子项,但我想在包含项周围放置条件语句。

目前,我有许多不同的选择以不同的方法处理 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com