在我有一组对象的情况下,这些对象与数据库中的项有关。我们创建这些对象的本地缓存以及索引,以便快速过滤/搜索数据。我遇到的问题是将对象列表转换为查找。
(非常)简化的对象:
String ItemID;
List<String> LocationIDs;一个项可以属于多个位置,每个位置可以包含多个项。
我希望使用LocationID作为键创建一个查找,以便使用它的位置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}
}
}然后,您可以轻松地检索给定位置的项目。
任何帮助都是非常感谢的。
谢谢
发布于 2014-05-30 05:45:08
假设它需要来自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对象本身,这是对上述内容的简单修改。
https://stackoverflow.com/questions/23947671
复制相似问题