0

在 SQL 中,它会这样完成:

SELECT * FROM Student
WHERE SchoolId IN
    (SELECT id FROM School WHERE Name LIKE '%elementary%')

如何使用 LINQ 实现这一点?我尝试了以下方法:

var list = context.Students.Where(x => context.Schools.Where(r => r.Name.Contains("elementary").Select(r => r.Id).Contains(x.SchoolId))

但不幸的是,它并没有给我想要的东西......

我知道可以Id先从表中检索所有 s School,但我认为这会对性能造成严重影响。最好我希望 LINQ to SQL 来处理所有事情;我不能使用 vanilla SQL 来做到这一点,因为我需要动态的东西,而目前 LINQ 对我来说是最好的解决方案。

上面的代码都是为了说明目的;我正在做的是有点不同(但或多或少相同)。我确实需要一些帮助;如果您需要更多信息,请随时询问。

编辑:我的错,我错过了一个领域。它有效,但结果没有出现,因为我错过了那个领域......很抱歉......

4

2 回答 2

2

试试这个:

var result = from st in context.Student
             from sc in context.Schools
             where sc.Name.Contains("elementary") && sc.SchoolId == st.SchoolId
             select st;

我对语法有点模糊,请原谅我。但这应该为您指明正确的方向。

于 2012-11-28T14:19:13.450 回答
1

像这样的东西应该工作。Contains 的第一个用途是在字符串对象上查看字符串是否包含子字符串“elementary”。Contains 的第二个用途是在一个列表上并检查第一个结果列表是否包含 SchoolId。

var sublist = from s in context.Schools
              where s.Name.Contains("elementary")
              select id;

var list = from s in context.Students
           where sublist.Contains(s.SchoolId)
           select s;
于 2012-11-28T14:26:50.257 回答