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

标签 c# asp.net-mvc entity-framework select

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

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

相关文章:

c# - 从另一个子查询获取列值

c# - 在 C# 中将字符串转换为泛型类型(基本或数组)

c# - 使用 Mono.Cecil 将实例字段添加到类中

c# - 跨线程读取值不重要的变量

c# - WPF 中没有 Main()?

javascript - 如何在 ASP.NET MVC 中的存储库上执行函数?

c# - Mysql 更新数据库 System.FormatException

c# - 在编辑器 onload 中显示 Datepicker 而不是需要用户选择

javascript - 将 "min.js"文件放入 MVC 包中是否有意义?

c# - 如何...显示数据库中的数据