首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

急 关于Linq排序有关问题

2012-12-24 
急, 关于Linq排序问题数据库数据如下ID, UserName1aa2bb3cc4dd5ff6gg7dd8fg9dd10hh...请问使用Linq如何让U

急, 关于Linq排序问题

数据库数据如下
ID, UserName
1   aa
2   bb
3   cc
4   dd
5   ff
6   gg
7   dd
8   fg
9   dd
10  hh
...

请问使用Linq如何让UserName等于dd的排在前,其它排在后面,先谢啦..
[解决办法]
其实也就是按UserName分组 求和 排序 linq 正在想怎么写 sql到很简单
[解决办法]
自己继承  IEqualityComparer,建一个自己的比较器,然后调用linq的orderby,参考http://blog.csdn.net/ycxjex2006/article/details/6515068
这是distinct的,道理一样
[解决办法]
不用比较器实现方法


        public class Student
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public string Sex { get; set; }
        }
         //辅助类
        public class NewStudent
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public string Sex { get; set; }
            public int Row { get; set; }
        }     
        static void Main(string[] args)
        {
            List<Student> listStudent = new List<Student>() { 
                new Student() { ID = 2, Name = "aa", Sex = "女" },
                new Student() { ID = 1, Name = "bb", Sex = "男" },
                new Student() { ID = 3, Name = "cc", Sex = "女" },
                new Student() { ID = 4, Name = "dd", Sex = "男" },
                new Student() { ID = 6, Name = "ee", Sex = "女" },
                new Student() { ID = 5, Name = "dd", Sex = "男" },
                new Student() { ID = 7, Name = "xx", Sex = "男" },


                new Student() { ID = 9, Name = "ee", Sex = "女" },
                new Student() { ID = 8, Name = "dd", Sex = "男" }
            };
            var query = listStudent.Select(x => new NewStudent()
            {
                ID = x.ID,
                Name = x.Name,
                Sex = x.Sex,
                Row = x.Name.Contains("dd") ? 2 : 1//Row用于排序
            }).OrderByDescending(x => x.Row).Select(x => new Student()
            {
                ID = x.ID,
                Name = x.Name,
                Sex = x.Sex
            }).ToList();
            query.ForEach(m => Console.WriteLine(m.ID + "\t" + m.Name + "\t" + m.Sex));
        }
}


结果急 关于Linq排序有关问题
[解决办法]
SQL写
SELECT * FROM TB 
ORDER BY CASE WHEN ID=4 THEN 0 ELSE 1 END
[解决办法]
引用:
数据库数据如下
ID, UserName
1   aa
2   bb
3   cc
4   dd
5   ff
6   gg
7   dd
8   fg
9   dd
10  hh
...

请问使用Linq如何让UserName等于dd的排在前,其它排在后面,先谢啦..

list=list.OrderBy(u=>u.UserName=="dd"?0:1).ToList();
[解决办法]
void Main()
{
 List<Student> list = new List<Student>() { 
new Student() { ID = 2, Name = "aa", Sex = "女" },
new Student() { ID = 1, Name = "bb", Sex = "男" },
new Student() { ID = 3, Name = "cc", Sex = "女" },
new Student() { ID = 4, Name = "dd", Sex = "男" },
new Student() { ID = 6, Name = "ee", Sex = "女" },
new Student() { ID = 5, Name = "dd", Sex = "男" },


new Student() { ID = 7, Name = "xx", Sex = "男" },
new Student() { ID = 9, Name = "ee", Sex = "女" },
new Student() { ID = 8, Name = "dd", Sex = "男" }
};
list=list.OrderBy(u=>u.Name=="dd"?0:1).ToList();
 
}
 public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
}


[解决办法]
var result = db.Where(x => x.UserName == "dd").Union(db.Where(x => x.UserName != "dd");
[解决办法]
引用:
var result = db.Where(x => x.UserName == "dd").Union(db.Where(x => x.UserName != "dd");


引用:
C# code?12345678910111213141516171819202122void Main(){     List<Student> list = new List<Student>() {                 new Student() { ID = 2, Name = "aa", Sex = "女" },                new……

我估计LZ不是这么简单吧 他的意思应该是 字符串出现的次数降序
[解决办法]
代码总是为业务服务的,楼主的意思很明显,某员工打开本部门的周报列表,让自己写的自动置顶,大体就是这么个需求。所以版主在5楼的回复是最清晰的。

引用:
引用:var result = db.Where(x => x.UserName == "dd").Union(db.Where(x => x.UserName != "dd");

引用:C# code?12345678910111213141516171819202122void Main(){ ……


引用:
引用:var result = db.Where(x => x.UserName == "dd").Union(db.Where(x => x.UserName != "dd");

引用:C# code?12345678910111213141516171819202122void Main(){ ……

[解决办法]

        static void Main(string[] args)
        {
            List<table> tables = new List<table>();
            tables.Add(new table { ID = 1, UserName = "aa" });
            tables.Add(new table { ID = 2, UserName = "bb" });
            tables.Add(new table { ID = 3, UserName = "cc" });
            tables.Add(new table { ID = 4, UserName = "dd" });
            tables.Add(new table { ID = 5, UserName = "ff" });


            tables.Add(new table { ID = 6, UserName = "gg" });
            tables.Add(new table { ID = 7, UserName = "dd" });
            tables.Add(new table { ID = 8, UserName = "fg" });

            List<table> table1 = tables.Where(c => c.UserName == "dd").OrderBy(c=>c.ID).ToList();
            List<table> table2 = tables.Where(c => c.UserName != "dd").OrderBy(c => c.ID).ToList();

            tables = table1.Union(table2).ToList();
            tables.ForEach(a => { Console.WriteLine(string.Concat("id=", a.ID)); Console.WriteLine(string.Concat("UserName=", a.UserName)); });

            Console.Read();
        }

热点排行