Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linq查询进行排序,然后将特定记录组置于顶部_Linq - Fatal编程技术网

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

我正在尝试使用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    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重复这正是我所期待的!!!!!