【问题标题】:How to improve this LINQ TO SQL queryable?如何改进这个 LINQ TO SQL 的可查询性?
【发布时间】:2013-01-07 21:01:33
【问题描述】:

我有一个学生列表,我想在其中创建一个查询,其中获取所有项目,而不是 1 x 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;

这对性能不利。我希望自己说清楚,如果没有,请告诉我。

【问题讨论】:

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


    【解决方案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】:
    var ats = Database.Current.AnsweredTests
        .Where(at => students.Any(s => s.StudentId == at.StudentId).ToList()
    

    【讨论】:

      【解决方案3】:

      可能是这样的:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多