Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 使用EntityFramework4在两个逗号分隔的列表中搜索_Linq_Entity Framework 4 - Fatal编程技术网

Linq 使用EntityFramework4在两个逗号分隔的列表中搜索

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

我有一个实体,它有一个名为YearsAvailable的属性,这是一个以逗号分隔的财政年度列表,例如05,09,10我有一个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;

虽然这样做有效,但它会产生多个数据库查询,并且不能很好地表达其意图。有没有更整洁的方法可以做到这一点?

基本上,如果您希望基于单个字段进行查询,则需要解决底层数据结构问题。在这种情况下,需要对CSV字段进行分解,才能在街道的数据库一侧进行搜索

如果无法修复该字段,但可以在筛选之前将初始结果限制在合理数量的实体内,则可能会获得更好的性能—捕获结果,然后在内存中筛选初步结果以处理此排列

如果列表很大,而您无法以这种方式处理它,那么另一种方法是使用Lucene在数据库外部为字段编制索引,然后根据该索引进行搜索