首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中用两列填充列表

如何在C#中用两列填充列表
EN

Stack Overflow用户
提问于 2016-09-18 17:33:05
回答 3查看 2.4K关注 0票数 0

我在SQL Server数据库中有数据,我正在获取字符串格式的数据。

数据如下所示:

代码语言:javascript
复制
08:00,11:00|11:00,13:00|13:00,16:00|

我们看到,字符串由逗号和竖线分隔。

逗号分隔值是开始和结束时隙,而管道分隔值是不同的时隙。

C#中的类

代码语言:javascript
复制
public string _TimeSlots { get; set; }  

public class TimeSlots 
{
    public string StartSlot { get; set; }
    public string EndSlot { get; set; } 
}

我试过这个:

代码语言:javascript
复制
public List{TimeSlots} TimeSlotList
{
    get { return _TimeSlots.Split(',').Select(DateTime.Parse).ToList();}
    set { TimeSlots = _TimeSlots.Remove(_TimeSlots.Length - 1); }
}

如何在C#中用两列填充列表?

EN

回答 3

Stack Overflow用户

发布于 2016-09-18 17:55:46

要将该字符串属性转换为列表,工作要复杂得多。首先需要拆分管道符号,然后迭代结果并拆分逗号符号。现在,您有了两个可用于构建TimeSlots实例并将该实例添加到列表中的元素。

从列表中获取具有指定格式的字符串的工作比较简单,但并不像您编写的那样简单

代码语言:javascript
复制
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());  
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-09-18 18:44:03

字符串需要在管道符号上的不同时隙中拆分,然后每个时隙字符串都需要在逗号上拆分。则可以组装时隙列表。Linq查询就可以做到这一点。

代码语言:javascript
复制
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();
票数 0
EN

Stack Overflow用户

发布于 2016-09-18 19:08:48

如果您使用的是sql server 2016,则可以像这样使用string_split函数。

代码语言:javascript
复制
SELECT string_split(yourdatecolumn,'|')

如果您使用的SQL Server版本低于2016年,则可以编写自定义拆分函数,该函数在许多站点中都有。如果你需要参考它,你可以在下面看到一个:

代码语言:javascript
复制
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,'|')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39556141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档