首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ILookup将项存储在多个键下

ILookup将项存储在多个键下
EN

Stack Overflow用户
提问于 2014-05-30 05:31:02
回答 1查看 145关注 0票数 1

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

(非常)简化的对象:

代码语言:javascript
复制
String ItemID;
List<String> LocationIDs;

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

我希望使用LocationID作为键创建一个查找,以便使用它的位置id获得属于特定位置的项的列表,并且可以在任意数量的位置(查找的键)下找到任何项。

我尝试了以下方法

代码语言:javascript
复制
items.ToLookup(item => item.LocationIDs);

但这并不返回所需的结果。

理想的用法是:

查找:

代码语言:javascript
复制
{
    ["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}
    }
}

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

任何帮助都是非常感谢的。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-30 05:45:08

假设它需要来自LocationID -> ItemID,一种方法是:

代码语言:javascript
复制
items.SelectMany(item => item.LocationIDs,
                 (item, locationID) => new { item.ItemID, LocationID = locationID })
     .ToLookup(tuple => tuple.LocationID, tuple => tuple.ItemID)

这首先将您的所有数据简化为(itemID,locationID)元组序列,然后再将其转换为查找。

如果查找需要来自LocationID -> Item对象本身,这是对上述内容的简单修改。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23947671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档