gpt4 book ai didi

c# - 选择具有多个期间时间字段的行

转载 作者:太空宇宙 更新时间:2023-11-03 15:16:44 24 4
gpt4 key购买 nike

我使用 asp.net mvc 和 c#我有很多列的数据表,一列有“时间”和这种格式的存储数据

14
16:30
17:05
...

在 View 中我有时间过滤器,用户可以从复选框中选择多个时间,我的过滤器复选框是

4 - 8
8 - 11
11 - 14
14 - 17
17 - 21
21 - 24

现在我想从数据表中过滤

var result = from r in myDataTable.AsEnumerable()  
where r.Field<string>("time") // between any passed time,like between 4-8 and 11-14 and 21-24
select r;
DataTable dtResult = result.CopyToDataTable();

我的问题是,我不知道用户通过了多少次,如果只通过一次很容易,但我不知道通过了多少次

我如何编辑代码以在任何时间和任何时间接受?

谢谢你的帮助

最佳答案

你可以这样做:

string input = "4 - 17"; // The input from your check box

var sections = input.Split('-');
int beginHour = int.Parse(sections[0].Trim());
int endHour = int.Parse(sections[1].Trim());

var result = from r in myDataTable.AsEnumerable()
let time = int.Parse(r.Field<string>("time").Split(':')[0])
where time >= beginHour && time < endHour
select r;

确保处理解析为 int 可能失败的情况


对于输入范围的集合,您可以执行以下操作:

List<string> originalData = new List<string> { "4 - 8", "8 - 11", "11 - 14", "14 - 17"};

var ranges = originalData.Select(item =>
{
var sections = item.Split('-');
return new
{
RangeBegin = int.Parse(sections[0].Trim()),
RangeEnd = int.Parse(sections[1].Trim())
};
}).ToList();

var result = from r in myDataTable.AsEnumerable()
let time = int.Parse(r.Field<string>("time").Split(':')[0])
from range in ranges
where time >= range.RangeBegin && time < range.RangeEnd
select r;

关于c# - 选择具有多个期间时间字段的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821702/

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