读书人

.NET数组排序的有关问题

发布时间: 2013-01-23 10:44:49 作者: rapoo

.NET数组排序的问题?
本帖最后由 chenjing1104 于 2013-01-11 11:27:08 编辑 表名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


* 张四7
* 张二10
*/

读书人网 >asp.net

热点推荐