我有一个存储库访问我的实体框架。我有这样一个方法:
public TEntity FindOne(Expression<Func<TEntity, bool>> criteria) { var query = _queryAll.Where(criteria); return query.FirstOrDefault(); }
Courses 和 Students Course 可以有多个 学生 . 我想写一个查询,返回学生最多的课程。
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")
现在还不清楚你为什么要把 && x.Course == "CS101" Where 你方合同中的条款 FindOne 方法。很简单,不是所有的事情都可以用这种方式表达。
&& x.Course == "CS101"
Where
FindOne
另外,你应该使用 OrderByDescending 所以第一个结果
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();