2010-08-31 48 views
0

我有一個名爲YearsAvailible屬性的實體,這是一個用逗號分隔的財務年度例如05,09,10我有一個通過年份名稱的string[]的API,我需要搜索具有在傳遞數組中的財政年度的所有實體。使用Entity Framework 4在兩個逗號分隔的列表中搜索

我能想出的最好的是這樣的:

var hash = new Hashtable(); 
foreach(var year in financialYears) 
{ 
    var categories = from expCat in All() 
        where expCat.YearsAvailable.Contains(year) 
        select expCat; 
    foreach (var category in categories) 
    { 
     if (!hash.ContainsKey(category.Id)) 
     { 
      hash.Add(category.Id, category); 
     } 
    } 
} 

return hash.Values; 

雖然這個工作,它產生多個數據庫查詢和不表達其意圖非常好。有沒有更簡單的方法來做到這一點?

回答

0

基本上,如果您想基於單個字段進行查詢,則需要修復基礎數據結構問題。在這種情況下,該CSV字段確實需要在數據庫的街道上進行爆炸式搜索。

如果無法修復該字段,但可以在過濾之前將初始結果限制爲合理數量的實體,則可能會獲得更好的性能,然後過濾結果,然後過濾內存中的初步結果以處理此排列。

如果列表很大,而且你無法如此處理,另一個想法是使用Lucene索引數據庫外的字段,然後根據該索引進行搜索。