c# - 使用演员对选择进行排序
问题描述
是否可以在 c# 中执行特殊格式的订单?我有 *.json 文件,其中包含如下数据
{
"RECORDS": [
{
"ROWW": "279166",
"ALBUMID": "3",
"LINK": "https://...1"
},
{
"ROWW": "279165",
"ALBUMID": "1",
"LINK": "https://...2"
},
{
"ROWW": "279164",
"ALBUMID": "2",
"LINK": "https://...3"
}]
}
...很多记录。而且我需要得到按 Roww 排序的 DataRows ,就像数字一样。
这就是我尝试这样做的方式:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
//...
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public class RECORD_PHOTO
{
public string ROWW { get; set; }
public string ALBUMID { get; set; }
public string LINK { get; set; }
}
public class PhotoObject
{
public List<RECORD_PHOTO> RECORDS { get; set; }
}
public List<string[]> listForJson = new List<string[]>();
public List<String> PHOTO_Rows = new List<String>();
public List<String> PHOTO_AlbumIds = new List<String>();
public List<String> PHOTO_Links = new List<String>();
string JsonFileName = @"C:\temp_work\test.json"
public DataTable dtFromJson;
private void Starting()
{
string jsonn = File.OpenText(JsonFileName).ReadToEnd();
var result = JsonConvert.DeserializeObject<PhotoObject>(JsonFileName);
PHOTO_Rows = result.RECORDS.Select(p => p.ROWW).ToList();
PHOTO_AlbumIds = result.RECORDS.Select(p => p.ALBUMID).ToList();
PHOTO_Links = result.RECORDS.Select(p => p.LINK).ToList();
for (int i = 0; i < PHOTO_Rows.Count; i++)
{
listForJson.Add(new string[] { PHOTO_Rows[i], PHOTO_AlbumIds[i], PHOTO_Links[i]});
}
dtFromJson = ConvertListToDataTable(VKPH);
dtFromJson.Columns[0].ColumnName = "ROWW";
dtFromJson.Columns[1].ColumnName = "ALBUMID";
dtFromJson.Columns[2].ColumnName = "LINK";
//
DataRow[] rows = dtFromJson.Select("", "ROWW ASC");
}
}
}
但是通过“ROWW”在选择中排序就像字符串一样,所以我需要添加一些演员,比如:
DataRow[] rows = dtFromJson.Select("", "TO_NUMBER(ROWW) ASC");
但这是错误的
解决方案
该DataColumn.Expression
属性可用于将另一列添加到维护 ROWW 列的 int 版本的表中:
dtFromJson.Columns.Add("ROWWint", typeof(int)).Expression = "CONVERT([ROWW], 'System.Int32')";
然后您可以在您的选择中按此列排序
DataRow[] rows = dtFromJson.Select("", "ROWWint");
在行动中看到它:https ://dotnetfiddle.net/Cuh2np
--
您还可以使用 LINQ 查询行集合:
dtFromJson = dtFromJson.Cast<DataRow>().OrderBy(x => Convert.ToInt32((string)x["ROWW"])).ToArray();
推荐阅读
- sas - 如何正确使用SAS中的SCAN功能
- excel - Excel VBA Internet Explorer Onclick 以单击下拉菜单
- python - views.py 和 urls.py 不连接以执行功能
- python - 神经网络不会“在任何地方”收敛
- docker - nginx 背后的 Grafana:重定向太多
- python - 如何在不复制父文件路径的情况下使用 shutil.copytree?
- python - 从列表中选择 n 个值,跨越范围
- spring-boot - Spring Security AuthenticationSuccessHandler 和 MockMvc
- python - 查找并单击脚本元素内的元素
- batch-file - 拖放多个文件以使用日志解析器