C# 如何改进这种LINQ到SQL的可查询性?

C# 如何改进这种LINQ到SQL的可查询性?,c#,linq,entity-framework,linq-to-sql,iqueryable,C#,Linq,Entity Framework,Linq To Sql,Iqueryable,我有一个学生列表,我想在其中创建一个查询,从中获取所有项目,而不是1乘1,如下代码所示: IEnumerable<Student> = ... List<AnsweredTest> ats = new List<AnsweredTest>(); foreach (var s in students) { query = from a

我有一个学生列表,我想在其中创建一个查询,从中获取所有项目,而不是1乘1,如下代码所示:

            IEnumerable<Student> = ...
            List<AnsweredTest> ats = new List<AnsweredTest>();

            foreach (var s in students)
            {
                query = from at in Database.Current.AnsweredTests
                        where at.StudentId == s.StudentId
                        select at;

                ats.Add(query.Single());
            }

            listView.ItemsSource = ats;
IEnumerable=。。。
列表ats=新列表();
foreach(学生中的var s)
{
query=来自Database.Current.AnsweredTests中的at
其中at.StudentId==s.StudentId
选择在;
ats.Add(query.Single());
}
listView.ItemsSource=ats;
这对性能不好。我希望自己说清楚,如果没有,请让我知道。

或者加入:

var ats = Database.Current.AnsweredTests
    .Where(at => students.Any(s => s.StudentId == at.StudentId).ToList()
   query = from at in Database.Current.AnsweredTests 
    join s in Database.Current.Students on at.StudentId == s.StudentId
    where s... // filter s if needed.
    select at;
或者获取学生id列表并将其传递到查询:

   int[] studentIds = students.Select(s => s.StudentId).ToArray();
   query = from at in Database.Current.AnsweredTests
     where studentIds.Any(id => at.StudentId == id)
     select at;

也许是这样的:

var studentIds = students.Select(s => s.StudentId);
var ats = Database.Current.AnsweredTests.Where(at => studentIds.Contains(at.StudentId));

这管用!在另一个答案中,我收到了如下错误: