实体框架:query vs foreach



如果可以使用foreach进行这样的简单查询?或者我应该一直使用query吗?

    public static Staff GetTeacher(Context context, int staffId)
    {
        foreach (Staff staff in context.Staff)
        {
            if(staff.StaffID == staffId)
            {
                return staff;
            }
        }
        return null;
    }
    public static object GetTeacher(Context context, int staffId)
    {
        var staff = from teacher in context.Staff
                    where teacher.StaffID == staffId
                    select new
                    {
                        Id = teacher.StaffID,
                        Teacher = teacher.FirstName + " " + teacher.LastName
                    };
        return staff;              
    }

foreach将遍历数据库表中的每条记录,直到找到匹配项,这意味着它可能最终将每条记录都拉入内存。这可能会非常慢。

Linq查询将构造一个SQL语句,该SQL语句只提取相关的记录。

所以第二个选择要好得多。但是,看起来您试图通过使函数返回一个对象来修复第二个查询给出人员对象的可枚举列表的事实。相反,你可以让整个东西看起来更漂亮,像这样:

public static Staff GetTeacher(Context context, int staffId)
{
    return context.Staff.Single(s => s.StaffID == staffId);
}

这将是最有效的方法。如果数据库中没有匹配的staffId,则抛出异常。这对你来说可能是件好事。如果不是,将其改为SingleOrDefault而不是Single

旁注:我担心的方法是static。这表明DbContext可能是共享的或长期存在的,这两个都是不好的事情。

最新更新