如果我有这样的陈述:
return _sqlconnection.Table<Student>().FirstOrDefault(t => t.Id == id);
首先会检索所有学生,然后通过选择来查找Id匹配的位置,或者知道使用WHERE子句将SQL语句发送到数据库吗?
答案 0 :(得分:2)
在SQLite.Net PCL中,看起来FirstOrDefault()被转换为限制1查询。但是,在您的情况下,您将谓词应用于FirstOrDefault。这会导致整个表被加载,因为SQLite.Net没有非常优雅地处理复杂的Linq。
如果您想确保整个表格不已加载,请执行以下操作:
return _sqlconnection.Table<Student>().Where(t => t.Id == id).FirstOrDefault();
在Xamarin论坛中有关于此主题的good thread。