日期:2014-05-17  浏览次数:20429 次

.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
                 * 张一