gpt4 book ai didi

c# - 使用 LINQ 进行动态投影

转载 作者:行者123 更新时间:2023-12-02 13:37:23 25 4
gpt4 key购买 nike

给定

(1) 数据库表,存储为列表的列表。表格的行和列大小未定义。

List<List<string>> table = new List<List<string>>();

例如:

table.Add(new List<string>() { "a1", "b1", "c1", "d1", "e1" });
table.Add(new List<string>() { "a2", "b2", "c2", "d2", "e2" });
table.Add(new List<string>() { "a3", "b3", "c3", "d3", "e3" });
| a1 | b1 | c1 | d1 | e1 || a2 | b2 | c2 | d2 | e2 || a3 | b3 | c3 | d3 | e3 |

(2) A list of integers. These integers resemble the indexes of database columns (zero-based), e.g.:

List<int> indexes = new List<int>() { 1, 3, 4 };

问题

我的目标是从 table 中投影那些索引出现在列表 indexes 中的列。根据上面的例子,结果应该是:

| b1 | d1 | e1 || b2 | d2 | e2 || b3 | d3 | e3 |

Current Solution

The best I could come up with is to iterate over all rows, like this:

List<List<string>> subtable = new List<List<string>>();
for (int index = 0; index < table.Count; index++)
{
subtable.Add(table[index].Where((t, i) => indexes.Contains(i)).ToList());
}

请求

如果可能的话,一个更优雅的解决方案。

最佳答案

这个怎么样:

List<List<string>> subtable =
table.Select(row => indexes.Select(i => row[i]).ToList()).ToList();

如果您需要检查数组边界,可以这样做:

List<List<string>> subtable =
table.Select(row => indexes.Where(i => i >= 0 && i < row.Count)
.Select(i => row[i]).ToList()).ToList();

或者如果您更喜欢查询语法:

List<List<string>> subtable =
(from row in table
select
(from i in indexes
where i >= 0 && i < row.Count
select row[i]
).ToList()
).ToList();

关于c# - 使用 LINQ 进行动态投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24959420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com