Пересечение двух наборов (списков) данных

У меня есть два набора данных (списки сложных объектов или данные SQL - LINQ to Entities), где я пытаюсь найти пересечение двух наборов данных. В частности, это пересечение свойства Complex, «HashData», как показано ниже:

SQL data

Набор слева, вероятно, будет примерно 10000 строк, в то время как набор справа всегда является подмножеством примерно из 100 строк. Я понимаю, что если я отсортирую набор слева по «Hashdata» при его сохранении, поиск будет намного быстрее с использованием какого-то алгоритма двоичного поиска, однако я не могу этого сделать по причинам, не относящимся к вопросу.

Меньшее подмножество данных никогда не сохраняется в SQL (показано только в приведенной ниже таблице SQL для пояснения). Он представлен в List во время выполнения.

В настоящий момент я выполняю жалкий цикл по данным и сопоставлению вроде этого (где запись - это список из 100 строк, а ShowData - это список из 10000 строк):

List<ShowData> ShowData = (from showData in context.ShowDatas
                           where (showData.Show.Id == advert.Id)
                           orderby showData.HashData ascending
                           select showData).ToList();

foreach (ShowData recording in recordingPoints) {
    foreach (ShowData actual in ShowData) {
        if (recording.HashData == actual.HashData) {
        }
    }
}

Итак, в основном я пытаюсь сделать следующее:

Вернуть список объектов ShowData (большой набор), где любые HashData (из небольшого набора) найдены в ShowData, НО в исходном запросе LINQ to Entity к БД.

Я подошел к следующему:

private IEnumerable<ShowData> xyz(List<ShowData> aObj, List<ShowData> bObj)
    {
        IEnumerable<string> bStrs = bObj.Select(b => b.HashData).Distinct();
        return aObj.Join(bStrs, a => a.HashData, b => b, (a, b) => a);
    }
6
задан AakashM 23 December 2011 в 09:15
поделиться