我有一个学生列表,我想创建一个查询,其中获取所有项目,而不是逐一显示以下代码:
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;
这对性能不利。我希望能让自己明白,如果没有,请告诉我。
答案 0 :(得分:1)
var ats = Database.Current.AnsweredTests
.Where(at => students.Any(s => s.StudentId == at.StudentId).ToList()
答案 1 :(得分:1)
要么加入:
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;
答案 2 :(得分:0)
也许是这样的:
var studentIds = students.Select(s => s.StudentId);
var ats = Database.Current.AnsweredTests.Where(at => studentIds.Contains(at.StudentId));