代码之家  ›  专栏  ›  技术社区  ›  itchi

如何编写Func<T,bool>来返回子级最多的实体?

  •  1
  • itchi  · 技术社区  · 15 年前

    我有一个存储库访问我的实体框架。我有这样一个方法:

    public TEntity FindOne(Expression<Func<TEntity, bool>> criteria)
    {
       var query = _queryAll.Where(criteria);
       return query.FirstOrDefault();
    }
    

    Courses Students Course 可以有多个 学生 . 我想写一个查询,返回学生最多的课程。

    Courses.OrderByDescending(x=>x.Students.Count()).FirstOrDefault();
    

    Func<T, bool>

    我希望不是

    (x=>x.OrderBy(y=>y.Students.Count()).FirstOrDefault().id == x.id)
    

    因为添加另一个标准似乎行不通:

        (x=>x.OrderBy(y=>y.Students.Count())
          .FirstOrDefault().id == x.id 
            && x.CourseName == "CS101")
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    现在还不清楚你为什么要把 && x.Course == "CS101" Where 你方合同中的条款 FindOne 方法。很简单,不是所有的事情都可以用这种方式表达。

    另外,你应该使用 OrderByDescending 所以第一个结果

    芬顿 计划。

    能够 写:

    x => x.CourseId == "CS101" && 
         x.Students.Count() == Courses.Where(x => x.CourseId == "CS101"))
                                      .Max(x => x.Students.Count())
    

    Courses 不管怎样,我想你是想逃避。除此之外,它应该 工作 但这很奇怪。

    如果你 可以 然后自己编写查询:

    var course = courses.Where(course => course.CourseId == "CS101")
                        .OrderByDescending(course => course.Students.Count())
                        .FirstOrDefault();
    

    推荐文章