急, 关于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));
}
}

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; }
}
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();
}