Linq 使用EntityFramework4在两个逗号分隔的列表中搜索
我有一个实体,它有一个名为YearsAvailable的属性,这是一个以逗号分隔的财政年度列表,例如05,09,10我有一个API,它传递一个年名称字符串[],我需要搜索所有在传递数组中有财政年度的实体 我能想到的最好办法是:Linq 使用EntityFramework4在两个逗号分隔的列表中搜索,linq,entity-framework-4,Linq,Entity Framework 4,我有一个实体,它有一个名为YearsAvailable的属性,这是一个以逗号分隔的财政年度列表,例如05,09,10我有一个API,它传递一个年名称字符串[],我需要搜索所有在传递数组中有财政年度的实体 我能想到的最好办法是: var hash = new Hashtable(); foreach(var year in financialYears) { var categories = from expCat in All() where e
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;
虽然这样做有效,但它会产生多个数据库查询,并且不能很好地表达其意图。有没有更整洁的方法可以做到这一点?基本上,如果您希望基于单个字段进行查询,则需要解决底层数据结构问题。在这种情况下,需要对CSV字段进行分解,才能在街道的数据库一侧进行搜索 如果无法修复该字段,但可以在筛选之前将初始结果限制在合理数量的实体内,则可能会获得更好的性能—捕获结果,然后在内存中筛选初步结果以处理此排列 如果列表很大,而您无法以这种方式处理它,那么另一种方法是使用Lucene在数据库外部为字段编制索引,然后根据该索引进行搜索