如何在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#中填充两列列表?

如何在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,'|')