linq查询进行排序,然后将特定记录组置于顶部
我正在尝试使用linq查询对一组元素进行排序,然后将满足特定条件的元素置于顶部 例如,如果我有如下元素列表:linq查询进行排序,然后将特定记录组置于顶部,linq,Linq,我正在尝试使用linq查询对一组元素进行排序,然后将满足特定条件的元素置于顶部 例如,如果我有如下元素列表: ID Names 1 Angie 2 Bret 3 Salva 4 cunnighma 5 maria 6 Galvin 7 Newton 8 Desmond 如果我以Name=Galvin的形式传递条件,那么应该首先对结果集进行排序,然后将value inn条件置于顶部 ID Names 6 Gal
ID Names
1 Angie
2 Bret
3 Salva
4 cunnighma
5 maria
6 Galvin
7 Newton
8 Desmond
如果我以Name=Galvin的形式传递条件,那么应该首先对结果集进行排序,然后将value inn条件置于顶部
ID Names
6 Galvin
1 Angie
2 Bret
4 cunnighma
8 Desmond
5 maria
7 Newton
3 Salva
一个选项是创建可在linq表达式中使用的扩展方法。下面的解决方案就是这样做的。我已经使它适用于多个匹配的情况 下面的示例代码将具有以下输出:
6:Galvin
1:Angie
2:Bret
4:cunnighma
8:Desmond
5:maria
7:Newton
3:Salva
代码如下:
void Main()
{
// Setup the example data
var names = new List<Record>
{
new Record { Id = 1, Name = "Angie" },
new Record { Id = 2, Name = "Bret" },
new Record { Id = 3, Name = "Salva" },
new Record { Id = 4, Name = "cunnighma" },
new Record { Id = 5, Name = "maria" },
new Record { Id = 6, Name = "Galvin" },
new Record { Id = 7, Name = "Newton" },
new Record { Id = 8, Name = "Desmond" }
};
// Sort the list and move the matches to the top
var result = names
.OrderBy(x => x.Name)
.MoveToTop(x => x.Name.Contains("alvin"));
// Display the results to the console
result
.ToList()
.ForEach(x => Console.WriteLine($"{x.Id}:{x.Name}"));
}
public class Record
{
public int Id { get; set; }
public string Name { get; set; }
}
public static class EnumerableExtensions
{
public static IEnumerable<T> MoveToTop<T>(this IEnumerable<T> list, Func<T, bool> predicate)
{
var matches = list.Where(predicate);
return matches.Concat(list.Except(matches));
}
}
void Main()
{
//设置示例数据
变量名称=新列表
{
新记录{Id=1,Name=“Angie”},
新记录{Id=2,Name=“Bret”},
新记录{Id=3,Name=“Salva”},
新记录{Id=4,Name=“cunnighma”},
新记录{Id=5,Name=“maria”},
新记录{Id=6,Name=“Galvin”},
新记录{Id=7,Name=“Newton”},
新记录{Id=8,Name=“Desmond”}
};
//对列表进行排序并将匹配项移到顶部
var result=名称
.OrderBy(x=>x.Name)
.MoveToTop(x=>x.Name.Contains(“alvin”);
//将结果显示到控制台
结果
托利斯先生()
.ForEach(x=>Console.WriteLine($“{x.Id}:{x.Name}”);
}
公开课记录
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共静态类EnumerableExtensions
{
公共静态IEnumerable MoveToTop(此IEnumerable列表,Func谓词)
{
var matches=list.Where(谓词);
返回matches.Concat(list.Except(matches));
}
}
可能与Thanx重复这正是我所期待的!!!!!