Использование Entity Framework 4 для поиска внутри двух разделенных запятыми списков - PullRequest
0 голосов
/ 31 августа 2010

У меня есть объект, у которого есть свойство YearsAvailible, это список финансовых лет, разделенных запятыми, например, 05,09,10 У меня есть API, который передает string[] названий годов, и мне нужно найти все объекты, чей финансовый год находится в переданном массиве.

Лучшее, что я могу придумать, это:

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 голосов
/ 31 августа 2010

По сути, если вы хотите делать запросы на основе отдельных полей, вам нужно будет исправить проблемы с базовой структурой данных.В этом случае это поле CSV действительно необходимо разбить, чтобы выполнить этот поиск на стороне базы данных на улице.

Если вы не можете исправить поле, но вы можете ограничить начальные результаты разумным числом объектов перед фильтрацией, вы, вероятно, получите лучшую производительность, получая результаты, а затем фильтруя предварительные результаты в памяти для обработки этогоперестановка.

Если список огромен, и вы не можете с ним справиться, другой идеей будет использование Lucene для индексации поля вне базы данных, а затем поиск по этому индексу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...