表名VideoEntities
vid(uniqueidentifier)
name(nvarchar(200))
DownloadUrl(nvarchar(200))
vid-(ddd3184e-378c-4960-a262-002341a70111)对应的数据是一串字符串
name-(第1集)
DownloadUrl-(qvod://154437949|831A711AA904AFF7FEBF1D7596D6A7C19B136B8A|快乐星球二1.rmvb|)所对应电视集数的观看的地址
我要对name字段进行排序,现在问题是该字段类型是nvarchar类型,不能按照int进行排序,我在sql语句对该字段进行转换会出错不行,
只能在后台代码进行处理,把name取出来,然后过滤掉汉字,保存数字,再对进行排序
这个排序部分要怎么编写
string vid = Request.QueryString["vid"].ToString();
string sql = "select * from VideoEntities where VideoInfoId='" + vid + "'";
DataTable dt = new DataTable();
dt = opsql.GetValue(sql, "VideoEntities", "ConnectionString");
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
string name = dt.Rows[i]["name"].ToString();//.Replace("'", " ")
name = System.Text.RegularExpressions.Regex.Replace(name, "第|集", "");
//Mfile.InnerHtml += "<a href=\"" + dt.Rows[i]["DownloadUrl"] + "\" target=\"_blank\">" + name + "</a>";
}
}
------解决方案--------------------------------------------------------
dt = dt.AsEnumerable().OrderBy(a =>Convert.ToInt32(Regex.Replace(a.Field<string>("name"),@"\D",""))).CopyToDataTable();
------解决方案--------------------------------------------------------
原始数据
tblDatas.Rows.Add(new object[] { null, "张一5", 10, 10 });
tblDatas.Rows.Add(new object[] { null, "张二10", 15, 20 });
tblDatas.Rows.Add(new object[] { null, "张三6", 20, 30 });
tblDatas.Rows.Add(new object[] { null, "张四7", 18, 40});
tblDatas.Rows.Add(new object[] { null, "张五3", 25, 50 });
排序结果 3 5 6 7 10
dt = dt.AsEnumerable().OrderBy(a =>int.Parse(Regex.Replace(a.Field<string>("name"), @"[\u4e00-\u9fa5]", string.Empty))).CopyToDataTable();
/*
* 张五3
* 张一5
* 张三6