gpt4 book ai didi

c# - 根据其他列表上的索引从表中选择行

转载 作者:行者123 更新时间:2023-11-30 16:17:33 25 4
gpt4 key购买 nike

看看你能不能帮我。我不太擅长 LINQ,所以我什至不知道这是否可能。实际上,我认为是的,但我还找不到最好的方法。

我有一个包含列表和数据表的对象。此 DataTable 的行数与列表中的项目数相同,并且它们是相关的(列表中的第一项与第一行相关,第二项与第二行相关,依此类推)。我希望能够从 DataTable 中选择日期范围及其相关行。我目前正在做,但它有一些循环和一个 IndexOf,我花了很长时间来处理。你们对我如何让它更快有什么建议吗?

这基本上是对象的结构(我已经简化了一点,但重要的是这里):

public class CustomObject(){
public List<DateTime> dates { get; set; }
public DataTable table { get; set; }
}

下面是我如何选择它:

private bool SelectRange(DateTime begin, DateTime end, CustomObject custom)
{
var range = from date in custom.dates
where date.CompareTo(begin) >= 0 &&
date.CompareTo(end) < 0
select date;

DataTable tmpTable = custom.table.Copy(); // I'm doing this just to copy the structure of the DataTable
tmpTable.Clear();

if (range.Count() > 0)
{
List<DataRow> rowList = new List<DataRow>();
foreach (var date in range)
{
int dateIndex = custom.dates.IndexOf(date);
rowList.Add(custom.table.Rows[dateIndex]);
}

foreach (DataRow row in rowList)
{
tmpTable.Rows.Add(row.ItemArray);
}
custom.table = tmpTable;
}
else
{
custom.table.Rows.Clear();
}
}

您对如何优化它有什么想法吗?

非常感谢您的关注。任何想法都将非常受欢迎(也欢迎对我的非母语英语进行更正)。

最佳答案

如果您想让事情变得更简单,请使用 .Zip() 将您的两个独立列表转换为一个相关列表。

var newList = custom.dates.Zip(custom.table.Rows, 
(first, second) => new { Date = first, Row = second });

一旦你有了它,你就可以在每个日期/行对上做一个简单的选择:

var reducedList = newList.Where(i => i.Date >= begin && i.Date <= end);

完成后,您可以将该简化列表添加到数据表中。

(我没有编译或测试以上内容)

关于c# - 根据其他列表上的索引从表中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16971772/

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