2012-03-05 76 views
1

我在学生表和课程表之间有一对多的关系。我想要返回所有具有符合特定条件的课程的所有学生,此刻我拥有此一对多的关系 - 只返回儿童的匹配

.Context.Users.Where(it => 
         it.Category.Description == "Student" && 
         it.Courses.All(p => p.Submitted == true && p.StatusId == null) && 
         it.Courses.Count > 0); 

现在,此工作正常;如果我删除“it.Courses.Count> 0”,那么我会找到没有课程的学生。如果没有伯爵,有没有更好的方法呢?

感谢,

戴尔

回答

1

你可以通过

it.Courses.Any() 

,询问如果集合有“任何”元素(至少一个)并更换it.Courses.Count > 0提高那么一点点在SQL中转换为EXISTS

+0

感谢您的投入,我会用这种方法。尝试将你在T-SQL中做的事情转换成Linq – Foxster 2012-03-06 08:55:21

0

看起来你想这样的事情

Context.Users.Where(it => 
         it.Category.Description == "Student" && 
         it.Courses.Any(p => p.Submitted == true && p.StatusId == null)) 
+0

这总是有点奇怪。这还会返回没有提交课程的学生(只要他们提交了其他课程)。这是另一个结果不同的查询。 – Slauma 2012-03-05 18:46:07

+0

我认为你是对的,我误解了他的问题。 – 2012-03-05 19:23:43