C# 在查询中查找项目列表

C# 在查询中查找项目列表,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我正在将StudentKey的字符串列表传递给我的LINQ to Entities查询。 所以我想返回下一个列表中的数据 public IQueryable<Students> GetStudentsFromKeys(List<string> studentKeys) { var result = from a in this.Context.Students where // ? return result.ToList(); } publi

我正在将StudentKey的字符串列表传递给我的LINQ to Entities查询。 所以我想返回下一个列表中的数据

public IQueryable<Students> GetStudentsFromKeys(List<string> studentKeys)
{
    var result = from a in this.Context.Students
    where // ?

    return result.ToList();
}
public IQueryable GetStudentsFromKeys(列出studentKeys)
{
var result=来自this.Context.Students中的a
在哪里?
返回result.ToList();
}
但我应该如何编写这样一个查询呢?我想查询该表,如果其键与该列表中的某个键相同,则返回结果。

您可以执行以下操作:

var result = from a in this.Context.Students
             where studentKeys.Contains(a.StudentKey)
             select a;
或方法语法为:

var query = this.Context.Students
                        .Where(r => studentKeys.Contains(r.StudentKey));
(假设
StudentKey
是要比较的字段的名称)

这将生成类似于的查询

SELECT * from Students WHERE StudentKey in ("1","2","3")

最好执行不区分大小写的contains。@Chaitanya,不确定是否需要它not@Habib只是它更安全、更正确。类似于,var query=this.Context.Students.Where(r=>studentKeys.Contains(r.StudentKey,StringComparer.OrdinalIgnoreCase))@默认情况下,它将使用表中列的排序规则。执行
StringComparer.OrginalIgnoreCase
不映射到SQL语句,或者不起作用(使用NotSupportedException),或者在内存中执行比较,方法是将所有记录拉到谓词之前,然后进行筛选。@Chaitanya,我不确定这是否会转化为未部署的数据源语言(SQL可能是),而且OP没有指定它,所以我宁愿远离它:)