有一个需求: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