有沒有辦法限制從Realm Xamarin LINQ查詢返回的「列」?領域Xamarin LINQ選擇
舉例來說,如果我有一個Customer
RealmObject,我希望所有客戶的名單,我必須查詢All<Customer>
然後枚舉的結果來構建名稱列表?這看起來麻煩而且效率低下。我沒有看到文檔中的任何內容。我在這裏錯過了很明顯的東西嗎謝謝!
有沒有辦法限制從Realm Xamarin LINQ查詢返回的「列」?領域Xamarin LINQ選擇
舉例來說,如果我有一個Customer
RealmObject,我希望所有客戶的名單,我必須查詢All<Customer>
然後枚舉的結果來構建名稱列表?這看起來麻煩而且效率低下。我沒有看到文檔中的任何內容。我在這裏錯過了很明顯的東西嗎謝謝!
你必須記住,Realm是一個基於對象的商店。在像Sqlite這樣的RDBMS中,將返回結果限制爲「記錄」的「列」的子集是有道理的,但在對象存儲中,您將從原始類中刪除屬性,從而創建一個新的動態類以然後將這些新類實例化爲對象。
因此是你想要的只是一個代表客戶的姓名,你可以做這個字符串列表:
List<string> names = theRealm.All<Customer>().ToList().Select(customer => customer.Name).ToList();
注:您採取Realm.All<>
結果到List
第一,然後使用一個LINQ Select
「過濾器」只是你想要的屬性。目前不支持在RealmResults
上直接使用.Select
()。
如果需要返回一個複雜類型,它是從原始RealObject
屬性的子集,假設你有一個匹配的POCO,您可以使用:
var custNames = theRealm.All<Customer>().ToList().Select((Customer c) => new Name() { firstName = c.firstName, lastName = c.lastName });
記住,一旦你轉換RealmResult
到使用RealmObject
s的POCO靜態列表會丟失活動性。
個人而言,我避免這樣做盡可能的境界是如此之快,使用RealmResult
,因此RealObject
小號是直接在處理時間和內存開銷,然後將那些波蘇斯每次你需要新的列表更有效...
只是爲了建立起來,有很少的情況下,你會想要獲得領域對象的屬性的子集(我想,發送到服務器或建立一個串聯的字符串)。在大多數情況下,您可以使用完整的'Customer'對象,由'All
@NikolaIrinchev完全同意,如果連接字符串的情況下使用First和Last名稱,則使用只在RealmObject中標記爲[[Ignored]]的readonly屬性來執行級聯操作,這比執行First +姓氏到字符串或POCO的「列表」.... – SushiHangover
只選擇名稱,不起作用爲什麼? – Marco