使用Entity Framework 4在两个逗号分隔的列表中搜索

时间:2010-08-31 15:14:21

标签: linq entity-framework-4

我有一个名为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;

虽然这有效,但它会产生多个数据库查询,并且不能很好地表达其意图。有更简洁的方法吗?

1 个答案:

答案 0 :(得分:0)

从根本上说,如果要根据各个字段进行查询,则需要修复基础数据结构问题。在这种情况下,确实需要展开该CSV字段才能在街道的数据库侧进行此搜索。

如果您无法修复该字段,但您可以在过滤之前将初始结果限制为合理数量的实体,您可能会获得更好的性能,然后在内存中过滤初步结果以处理此排列。< / p>

如果列表很大并且您无法以这种方式处理它,另一个想法是使用Lucene索引数据库外的字段,然后搜索该索引。