LINQ to SQL,对外来实体的条件

时间:2012-11-28 14:14:44

标签: c# sql linq entity-framework linq-to-sql

在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对我来说是最好的解决方案。

以上代码仅供参考;我正在做的是有点不同(但或多或少相同)。我确实需要一些帮助;如果您需要更多信息,请随时提出。

编辑:我的不好,我错过了一个字段。它有效,但结果没有显示,因为我错过了那个领域......很抱歉......

2 个答案:

答案 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;