1

我有一种情况,我有一组对象,这些对象与数据库中的项目相关。我们创建这些对象的本地缓存以及索引,以允许快速过滤/搜索数据。我遇到的问题是将对象列表转换为查找。

(非常)简化的对象:

String ItemID;
List<String> LocationIDs;

一个项目可以属于多个位置,每个位置可以包含多个项目。

我想使用 LocationIDs 作为键创建查找,以便使用其位置 ID 获取属于特定位置的项目列表,并且可以在任意数量的位置(查找键)下找到任何项目。

我尝试了以下

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}
    }
}

然后,您可以轻松地检索给定位置的项目。

任何帮助表示赞赏。

谢谢

4

1 回答 1

4

假设它需要来自 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 对象本身进行查找,则对上述内容进行微不足道的修改。

于 2014-05-30T05:45:08.840 回答