有一個需求:A表字段有A1 是 string 裏面數據是 a1,a2,a3 例如 我 搜索字符串 str 是 a1,a3 ,想要的結果 是 A1 中 含有 a1 a3 的都出來。sql
因此,這種繁瑣的檢索,個人寫法是先取出了全部的,而後遍歷的。 這樣當數據庫記錄很是多的時候,檢索會很慢。個人代碼以下:數據庫
public List<ClientStatusLog> GetByKeys(string keys) { var allData = _clientStatusLogEnityRepository.GetAll(); if (keys != null && !string.IsNullOrEmpty(keys.ToString())) { var data = allData.ToList().Where( m => m.StatusCode.Split(',').Contains(keys,new SpecailStringCompare()) ).ToList(); return data; } return allData.ToList(); }
public class SpecailStringCompare : IEqualityComparer<string> { /// <summary> /// Self Equals /// </summary> /// <param name="x">each dbFieldValue splited item</param> /// <param name="y">listKey</param> /// <returns></returns> public bool Equals(string x, string y) { bool isEqual = false; if (x != null && y != null) { foreach (var key in y.Split(',')) { if (x.Equals(key)) { isEqual = true; break; } } } return isEqual; } public int GetHashCode(string obj) { return 0; } }
查看反編譯System.Linq.Enumerable.Contains<TSource>(this IEnumerable<TSource> source, TSource value);的方法體以下:this
--TODO.net
.net中針對這種狀況的解決方案是 全文檢索Lucene.net ?blog
--TODO內存
能夠想一想,若是讓用sql語句,如何去實現?字符串
--TODOstring