[英]How to execute a TSQL input command in C# which includes a string with “-”, “\” or “;”
[英]How to sort a string array which includes a date in c#?
我不確定這是否曾經被問過,但是我有一些字符串數組需要排序。 想法是合並不同的字符串數組,並按作為每個元素一部分的date字段對它們進行排序。 我正在從sql server表中讀取信息。
我該怎么做這樣的事情?
數據的示例可能是這樣的:
“ TYPE | Field1 | Field2 | Date”
“ TYPE | Field1 | Field2 | Date”
“ TYPE | Field1 | Field2 | Date”
對於第二個數組:
“ TYPE | Field1 | Field2 | Field3 | Date”
“ TYPE | Field1 | Field2 | Field3 | Date”
“ TYPE | Field1 | Field2 | Field3 | Date”
等等
對於其他字符串數組也是如此。
因此,從本質上講,如何根據日期對多個字符串數組進行排序和合並?
如果可以幫助解決問題,我可以輕松地列出一個清單。
哦,另一個問題是不同的數組內部不會有相同數量的數據。
嘗試類似:
var sorted = input.OrderBy(line => DateTime.Parse(line.Split('|').Last()))
.ToArray();
這是您的代碼的有效示例。 無論數組有多少個字段,它都會對數組進行排序。 您可能需要根據閱讀內容來更改更改格式。
var arr1 = new string[] {
"TYPE|Field1|Field2|2015-01-03 00:00:00",
"TYPE|Field1|Field2|2014-01-07 00:00:00",
"TYPE|Field1|Field2|2015-01-04 00:00:00"
};
var orderedArr1 = arr1.OrderBy(a => DateTime.ParseExact(a.Substring(a.LastIndexOf('|') + 1), "yyyy-MM-dd hh:mm:ss", null ));
foreach(var a in orderedArr1)
{
Console.WriteLine(a);
}
合並2個數組,然后進行排序:
var arr1 = new string[] {
"TYPE|Field1|Field2|2015-01-03 00:00:00",
"TYPE|Field1|Field2|2014-01-07 00:00:00",
"TYPE|Field1|Field2|2015-01-04 00:00:00"
};
var arr2 = new string[] {
"TYPE|Field1|Field2|Field3|2015-01-04 00:00:00",
"TYPE|Field1|Field2|Field3|2014-01-02 00:00:00",
"TYPE|Field1|Field2|Field3|2015-01-06 00:00:00"
};
var mergedArrs = arr1.Concat(arr2);
var orderedArr1 = mergedArrs.OrderBy(a => DateTime.ParseExact(a.Substring(a.LastIndexOf('|') + 1), "yyyy-MM-dd hh:mm:ss", null));
foreach(var a in orderedArr1)
{
Console.WriteLine(a);
}
上面的代碼困擾着我,所以我想將其重構為更易讀和易於維護的東西。
class Program
{
static void Main(string[] args)
{
var arr1 = new string[] {
"TYPE|Field1|Field2|2015-01-03 00:00:00",
"TYPE|Field1|Field2|2014-01-07 00:00:00",
"TYPE|Field1|Field2|2015-01-04 00:00:00"
};
var arr2 = new string[] {
"TYPE|Field1|Field2|Field3|2015-01-04 00:00:00",
"TYPE|Field1|Field2|Field3|2014-01-02 00:00:00",
"TYPE|Field1|Field2|Field3|2015-01-06 00:00:00"
};
var mergedData = new List<TableData>();
mergedData.Append(arr1);
mergedData.Append(arr2);
foreach (var item in mergedData.OrderBy(a => a.Date))
{
Console.WriteLine(item.RawData);
}
}
}
public struct TableData
{
public DateTime Date { get; set; }
public string RawData { get; set; }
}
public static class Extensions
{
public static void Append(this List<TableData> list, string[] items)
{
foreach(var item in items)
{
var date = DateTime.ParseExact(item.Substring(item.LastIndexOf('|') + 1), "yyyy-MM-dd hh:mm:ss", null);
list.Add(new TableData { Date = date, RawData = item });
}
}
}
本質上,我們正在創建一個TableData
列表(請string RawData
命名),該列表具有一個DateTime Date
和可將數據提取到的string RawData
字段。 我們有一個擴展方法Append
用於接受一個string[]
TableData
類型的List。 該方法遍歷字符串數組中的每個字符串,使用與以前相同的方法提取日期,使用數據和原始數據創建一個TableData
對象,並將其添加到我們的列表中。
您可以根據需要使用任意數量的string[]
進行此操作。 一旦添加了所有數組,就可以進入for
循環了。 我們的列表的排序在這里完成; 我個人認為這更具可讀性。 隨意更改事物的名稱,並根據需要將其適合您的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.