如何在c#中填充两列的列表
本文关键字:两列 列表 填充 | 更新日期: 2023-09-27 18:07:21
我在SQL Server数据库中有数据,我正在以字符串格式获取数据。
数据如下:
08:00,11:00|11:00,13:00|13:00,16:00|
我们看到,字符串由逗号和管道分隔。
逗号分隔的值为Start &结束时隙,其中管道分隔的值是不同的时隙。
c#中的类
public string _TimeSlots { get; set; }
public class TimeSlots
{
public string StartSlot { get; set; }
public string EndSlot { get; set; }
}
我试过了:
public List{TimeSlots} TimeSlotList
{
get { return _TimeSlots.Split(',').Select(DateTime.Parse).ToList();}
set { TimeSlots = _TimeSlots.Remove(_TimeSlots.Length - 1); }
}
如何在c#中填充两列列表?
要将字符串属性转换为List,工作要复杂得多。首先需要对管道符号进行分割,然后对结果进行迭代,并对逗号符号进行分割。现在您有了两个元素,可以用来构建TimeSlots实例并将该实例添加到列表中。
从List中返回具有指定格式的字符串的工作更简单,但不像您写的
那么简单public List<TimeSlots> TimeSlotList
{
get
{
List<TimeSlots> result = new List<TimeSlots>();
string[] parts = _TimeSlots.Split(new char[] { '|'}, StringSplitOptions.RemoveEmptyEntries);
foreach (string slotData in parts)
{
string[] data = slotData.Split(',');
result.Add(new TimeSlots()
{
StartSlot = data[0],
EndSlot = data[1]
});
}
return result;
}
set
{
var result = value.Select(x => x.StartSlot + "," + x.EndSlot);
_TimeSlots = string.Join("|", result.ToArray());
}
}
字符串需要在管道符号上的不同时隙中分割,然后每个时隙字符串需要在逗号符号上分割。然后可以组装时间段列表。Linq查询就可以了。
string timeSlotsString = "08:00,11:00|11:00,13:00|13:00,16:00|";
var timeSlotList = timeSlotsString.Split(new char[] { '|'}, StringSplitOptions.RemoveEmptyEntries)
.Select(slotData => slotData.Split(','))
.Select(value => new TimeSlots() { StartSlot = value[0], EndSlot = value[1].ToString()})
.ToList();
如果你正在使用sql server 2016,那么你可以使用string_split函数,像这样
SELECT string_split(yourdatecolumn,'|')
如果你使用的是旧的SQL Server少于2016年,那么你可以写你的自定义拆分函数,这是在许多网站。如果你需要参考,你可以在下面看到:
CREATE FUNCTION dbo.split (@str varchar(max)
, @delimiter varchar(5))
RETURNS @retTable TABLE (
id int IDENTITY (1, 1),
splitvalue varchar(max)
)
BEGIN
DECLARE @st int,
@end int
SET @st = 1
SET @end = CHARINDEX(@delimiter, @str)
WHILE 1 = 1
BEGIN
IF (@end = 0)
BEGIN
INSERT INTO @retTable (splitvalue)
VALUES (SUBSTRING(@str, @st, LEN(@str) - 1))
BREAK
END
INSERT INTO @retTable (splitvalue)
VALUES (SUBSTRING(@str, @st, @end - @st))
SET @st = @end + 1
SET @end = CHARINDEX(@delimiter, @str, @st)
END
RETURN
END
SELECT * FROM split(yourdatecolumn,'|')