Linq - 主要详细信息表 - 按查找表过滤

时间:2012-08-18 13:44:15

标签: .net linq entity-framework

我有一个简单的主要细节场景(如课程和具有1..n外键关联的学生),我查询课程表并使用实体框架来访问学生(通过延迟加载):

    Dim db As New EFEntities()
    Dim x = db.COURSES.SingleOrDefault(Function(f) f.ID= 101)
    'Access Master
    Console.WriteLine(x.COURSENAME.ToString())
    'Access Detail
    For Each e In x.STUDENTS
        Console.WriteLine(e.STUDENTNAME)
    Next

但是现在我只希望返回的学生有一定的价值(称之为CATEGORY)。有效的值存储在查找表中。所以我想我需要一个像WHERE STUDENTS.CATEGORY IN (SELECT VALUE FROM ANYTABLE)这样的子选择,但我不知道如何将它添加到我现有的查询中?

2 个答案:

答案 0 :(得分:0)

var catIds= new List<long>{cat1Id, cat2Id};
var filteredStudents = x.Students.Where(s=>catIds.Any(s.Category.CategoryId));

在C#中,你需要类似的东西。

答案 1 :(得分:0)

您可以像这样使用Contains()

Dim catIds = ... 'Get your category Ids here.
Dim students = From s In context.Students _
               Where catIds.Contains(s.CategoryId) Select s