簡體   English   中英

Sqlite PCL和Linq - 是SQLite.Net Table方法將整個表加載到集合中嗎?

[英]Sqlite PCL and Linq - Is SQLite.Net Table method loading the entire table into a collection?

我是一個構建Windows Phone 8的應用程序。 我決定在便攜式庫中使用Sqlite PCL來緩存一些數據。

我沒有在互聯網上找到最近的信息我是否可以在桌面上使用linq。

我當然可以這樣做

var phones = db.Table<PhoneNumber>().Where(x => some condition).ToList();

如果我看一下Where語句的返回值,它就是一個TableQuery

我的問題是:我是否通過執行此操作檢索所有電話號碼,然后使用Linq過濾項目? 或者linq在返回之前直接在sql命令中過濾項目?

在我看來,我傷口說Linq直接在sql語句中過濾項目,因為Where函數返回一個TableQuery但我還沒有找到任何確認。

第二個問題:當我使用FirstOrDefault時它是一樣的嗎?

顯然,它並不那么明顯。 我剛剛在這里發現了一個非常有趣的論壇帖子

總而言之,如果你這樣做

var whereFirstOrDefault = Table<AlertType>().Where(a => a.Name.Equals(alertType.Name)).FirstOrDefault();

這與此非常不同

var firstOrDefault = table.FirstOrDefault(a=> a.Name.Equals(alertType.Name));

第一個查詢生成此命令,但不檢索整個表:

select * from "AlertType" where ("Name" = (?)) limit 1

但是,第二個查詢是:

select * from "AlertType"

如上所述,

“SQLite.TableQuery有一個'Where'的擴展方法,它采用謂詞。”

這意味着Linq將修改sql語句。

“但SQLite.TableQuery只有一個不帶參數的FirstOrDefault:”

這意味着,如果你將FirstOrDefault與謂詞一起使用,它將檢索整個表,但如果你在tablequery上沒有謂詞的情況下使用它,它將修改sql語句

“如果你使用謂詞(我的第二種方法)調用FirstOrDefault,SQLite.NET會選擇整個表,然后使用LINQ To Objects對內存中的集合執行FirstOrDefault。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM