在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
表中检索所有School
,但我认为这会对性能造成严重影响。我最好还是喜欢LINQ to SQL来处理所有事情;我不能使用vanilla SQL做这个,因为我需要动态的东西,目前LINQ对我来说是最好的解决方案。
以上代码仅供参考;我正在做的是有点不同(但或多或少相同)。我确实需要一些帮助;如果您需要更多信息,请随时提出。
编辑:我的不好,我错过了一个字段。它有效,但结果没有显示,因为我错过了那个领域......很抱歉......
答案 0 :(得分:2)
试试这个:
var result = from st in context.Student
from sc in context.Schools
where sc.Name.Contains("elementary") && sc.SchoolId == st.SchoolId
select st;
我对语法有点模糊,原谅我。但这应该指向正确的方向。
答案 1 :(得分: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;