簡體   English   中英

創建索引的類集合

[英]Create indexed class collection

我正在尋找創建需要索引的c#類的集合,以加快對某些屬性的訪問。 要注意的是,該類包含對現有服務/類的大量引用,這些引用不容易序列化/反序列化,因此數據庫不足。

class ComplexTestClass
{
    public MyService Service;
    public Guid Id;
    public ComplexObject Object;
}

使用linq,我可以像這樣查詢集合:

complexTestClassCollection.where(complexClass => complexClass.Object.Type == "TestType");

當我的收藏增長時(它確實變得很大),這些linq查詢的效率非常低。 我正在尋找創建某種類型的索引,以便可以對屬性進行查找,以避免一起使用linq查詢。

我的搜索使我找到了LiteDB ,它有一種令人印象深刻的索引/查詢集合的方法,但是需要對集合進行序列化/反序列化,這是我當前遇到的問題(MyService無法在不進行大量重寫的情況下進行序列化)。

為了澄清,我需要像LiteDB一樣更復雜的索引。 查詢示例可能是:

complexTestClassCollection.where(complexClass => complexClass.Object.Type == "TestType" && complexClass.Object.ParentObject == "TestParent" && complexClass.Object.Members.Contains(4));

在上述情況下,我可以不對complexClass.Object.Members.Contains(4)進行索引,因為complexClass.Object.Type == "TestType" && complexClass.Object.ParentObject == "TestParent"使結果集變暗減少到<10個元素,並且在該collection上運行linq是可以接受的。

Linq查詢遵循延遲執行,因此除非您執行.ToList()或ToCollection(),否則它不會帶來所有結果。 另外,這取決於您執行的搜索類型。 我希望linq中的First()擴展能夠盡早退出。

您也可以將數據放入數據庫中,並使用IQueryable獲得良好的性能。

從長遠來看,創建一個將查詢轉換為sql語句的查詢引擎將是可維護和可擴展的,然后可以通過將其重構為不同的類並對其進行查詢來進行水平擴展,而無需針對該類創建大集合並進行硬編碼類型和屬性。

暫無
暫無

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

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