2013-01-07 36 views
0

我有一个学生名单,我想正如我在下面的代码创建一个查询,在那里得到所有的项目,而不是由1:如何改进此LINQ TO SQL可查询?

  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; 

这是不好的表现。我希望让自己清楚,如果不是,请让我知道。

回答

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; 

或者抢学生证的名单,并将其传递到查询:

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

这个工程!在另一个答案我收到这样的错误:http://stackoverflow.com/questions/10862491/unable-to-create-a-constant-value-only-primitive-types –

1
var ats = Database.Current.AnsweredTests 
    .Where(at => students.Any(s => s.StudentId == at.StudentId).ToList() 
0

也许是这样的:

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