我有一个名为YearsAvailible的实体,这是一个以逗号分隔的财务年度列表,例如: 05,09,10
我有一个传递string[]
年份名称的API,我需要搜索所有在传递数组中有财务年度的实体。
我能想出的最好的是:
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 :(得分:0)
从根本上说,如果要根据各个字段进行查询,则需要修复基础数据结构问题。在这种情况下,确实需要展开该CSV字段才能在街道的数据库侧进行此搜索。
如果您无法修复该字段,但您可以在过滤之前将初始结果限制为合理数量的实体,您可能会获得更好的性能,然后在内存中过滤初步结果以处理此排列。< / p>
如果列表很大并且您无法以这种方式处理它,另一个想法是使用Lucene索引数据库外的字段,然后搜索该索引。