如何改进这个LINQ TO SQL可查询?

时间:2013-01-07 21:01:34

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

我有一个学生列表,我想创建一个查询,其中获取所有项目,而不是逐一显示以下代码:

            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;

这对性能不利。我希望能让自己明白,如果没有,请告诉我。

3 个答案:

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