【发布时间】:2019-08-08 15:25:42
【问题描述】:
假设我有这些数据。由于rows源的内容可以是任意类型,所以我选择了对象列表来收集数据进行处理,数据中有null。
List<object> row1 = new List<object>() {"id", 2345, null, "id", null, null};
List<object> row2 = new List<object>() { "name", "Joe", null, "Joe", null, null };
List<object> row3 = new List<object>() { "card no", 2222, null, "card no",null, null };
List<List<object>> rowCollection = new List<List<object>>();
rowCollection.Add(row1);
rowCollection.Add(row2);
rowCollection.Add(row3);
所以我最终得到了一个 List<List<object>> 集合
我有一个 LINQ 问题。
-
我知道我可以使用这样的索引访问单个数据片段
var result = rowCollection[0][0].ToString() 如何使用 LINQ 提取作为我要搜索的键之后的下一个对象的对象值?比如我想搜索列表
rowCollection,通过在上面的数据集合中搜索id键得到数字2345。并且在具有重复id键的数据行中可能存在重复键。但我只想要搜索行中第一个键的结果。
其他人也一样。搜索rowCollection,我想搜索“name”并提取值`“Joe”并搜索“card no”并提取数字2222。
任何建议表示赞赏。
【问题讨论】:
-
你的数据结构没有逻辑。
"id"和2345之间没有任何关系。 -
这是一种非常晦涩难懂的数据建模方式。这些数据的来源是什么?这种结构可以改变吗?
-
我建议使用不同的数据结构。使用
Dictionary<object, object>或类似的东西。 -
来源是从第 3 方 xls 电子表格中提取的行。我无法控制数据或其在源中的结构。它以这种方式被提取为如图所示的数据行。
-
您不需要仅仅因为它来自电子表格而将数据保留为列表格式。您可以创建一个类来存储每一行,然后在类实例列表上使用 LINQ 来获取您需要的数据。这将使代码更易于阅读!