0

以下のコードを示すように、1つずつではなくすべてのアイテムを取得するクエリを作成したいStudentリストがあります。

            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;

これはパフォーマンスには良くありません。はっきりさせておきたいのですが、そうでない場合はお知らせください。

4

3 に答える 3

1
var ats = Database.Current.AnsweredTests
    .Where(at => students.Any(s => s.StudentId == at.StudentId).ToList()
于 2013-01-07T21:11:05.367 に答える
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;
于 2013-01-07T21:13:14.863 に答える
0

多分このようなもの:

var studentIds = students.Select(s => s.StudentId);
var ats = Database.Current.AnsweredTests.Where(at => studentIds.Contains(at.StudentId));
于 2013-01-07T21:19:48.520 に答える