ILookup магазин под несколькими ключами
У меня есть ситуация, когда у меня есть набор объектов, эти объекты относятся к элементам в базе данных. Мы создаем локальный кеш этих объектов вместе с индексами, чтобы обеспечить быструю фильтрацию / поиск данных. У меня возникла проблема с преобразованием списка объектов в поисковый запрос.
(очень) упрощенный объект:
String ItemID;
List<String> LocationIDs;
Элемент может принадлежать нескольким местоположениям, и каждое местоположение может содержать несколько элементов.
Я хочу создать поиск, используя идентификаторы LocationID в качестве ключей, чтобы я мог получить список элементов, принадлежащих определенному местоположению, с использованием его идентификатора местоположения, и любой элемент можно найти в любом количестве местоположений (ключей поиска).
Я попробовал следующее
items.ToLookup(item => item.LocationIDs);
Но это не возвращает желаемый результат.
Идеальное использование будет:
Уважать:
{
["Location 1"] => {
{Item 1},
{Item 2},
{Item 3},
{Item 9},
},
["Location 2"] => {
{Item 2},
{Item 4},
{Item 3}
},
["Location 3"] => {
{Item 1},
{Item 3},
{Item 7}
},
["Location 4"] => {
{Item 1},
{Item 2},
{Item 10}
}
}
Тогда вы можете легко получить предметы для данного места.
Любая помощь приветствуется.
Спасибо
1 ответ
Предполагая, что это должно быть из LocationID -> ItemID, одним из способов будет:
items.SelectMany(item => item.LocationIDs,
(item, locationID) => new { item.ItemID, LocationID = locationID })
.ToLookup(tuple => tuple.LocationID, tuple => tuple.ItemID)
Это сначала сводит все ваши данные в последовательность (itemID, locationID) кортежей, а затем превращает их в поиск.
Это тривиальная модификация вышеприведенного, если поиск должен происходить из объекта LocationID -> Item.