2016-10-22 5 views
2

Если у меня есть такое заявление:Выполняет ли SQLite.net .FirstOrDefault сначала каждую строку, а затем запрашивает тех, у кого есть?

return _sqlconnection.Table<Student>().FirstOrDefault(t => t.Id == id); 

Будет первым получать все студенты, а затем выбрать через то, чтобы найти, где совпадает с Id или он будет знать, чтобы отправить SQL заявление в базе данных с WHERE статья?

ответ

1

В SQLite.Net PCL похоже, что FirstOrDefault() преобразуется в предел 1 запроса. Однако в вашем случае вы применяете предикат к FirstOrDefault. Это приведет к загрузке всей таблицы, поскольку SQLite.Net не будет обрабатывать сложные Linq очень изящно.

Если вы хотите, чтобы убедиться, что вся таблица не загружается, пойти на что-то вроде этого:

return _sqlconnection.Table<Student>().Where(t => t.Id == id).FirstOrDefault(); 

Там же в форумах Xamarin по этой теме в good thread.