我在SQL Server数据库中有数据,我正在获取字符串格式的数据。
数据如下所示:
08:00,11:00|11:00,13:00|13:00,16:00|我们看到,字符串由逗号和竖线分隔。
逗号分隔值是开始和结束时隙,而管道分隔值是不同的时隙。
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#中用两列填充列表?
发布于 2016-09-18 17:55:46
要将该字符串属性转换为列表,工作要复杂得多。首先需要拆分管道符号,然后迭代结果并拆分逗号符号。现在,您有了两个可用于构建TimeSlots实例并将该实例添加到列表中的元素。
从列表中获取具有指定格式的字符串的工作比较简单,但并不像您编写的那样简单
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());
}
}发布于 2016-09-18 18:44:03
字符串需要在管道符号上的不同时隙中拆分,然后每个时隙字符串都需要在逗号上拆分。则可以组装时隙列表。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();发布于 2016-09-18 19:08:48
如果您使用的是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,'|')https://stackoverflow.com/questions/39556141
复制相似问题