Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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

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
C# 通过维护顺序和相关性将列表中的类似记录分组_C#_Linq - Fatal编程技术网

C# 通过维护顺序和相关性将列表中的类似记录分组

C# 通过维护顺序和相关性将列表中的类似记录分组,c#,linq,C#,Linq,我用更清晰的样本数据重新表述问题,以帮助成员更好地理解我的问题 我使用linq进行了相当基本的查询,但不知道如何编写复杂的查询。我在列表中有这样的数据 var list = new List<Users>() { new Users() { FirstName = "John", LastName= "Doe", MiddleName = "P.", Phone = "111-111-111", Email = "abc@xyz.com" }, new User

我用更清晰的样本数据重新表述问题,以帮助成员更好地理解我的问题

我使用linq进行了相当基本的查询,但不知道如何编写复杂的查询。我在列表中有这样的数据

var list = new List<Users>()
{ 
  new Users() { FirstName = "John", LastName= "Doe", MiddleName = "P.", Phone = "111-111-111", Email = "abc@xyz.com" },      
  new Users() { FirstName = "Alex", LastName= "Jones", MiddleName = "S", Phone = "333-333-222", Email = "xyz@abc.com" },   
  new Users() { FirstName = "John", LastName= "Doe", MiddleName = "p.", Phone = "111-111-111", Email = "abc@xyz.com" },   
  new Users() { FirstName = "John", LastName= "Doe", MiddleName = "", Phone = "111-222-111", Email = "abc@xyz.com" },   
  new Users() { FirstName = "John", LastName= "", MiddleName = "", Phone = "111-111-111", Email = "abc@xyz.com" },   
  new Users() { FirstName = "Alex", LastName= "James", MiddleName = "N", Phone = "111-111-111", Email = "cde@xyf.com" },   
  new Users() { FirstName = "Alex", LastName= "Jones", MiddleName = "S", Phone = "333-333-222", Email = "xyz@abc.com" },   
  new Users() { FirstName = "John", LastName= "Doe", MiddleName = "", Phone = "111-222-111", Email = "" }, 
};
它没有给我正确的订单。例如,此查询将一个用户的大多数匹配列行分组到顶部,而另一个用户的记录则很少。我在想,也许是团队可以做到这一点?请引导我通过这个

注意:列表中有我没有提到的额外列,但它们不会用于任何排序或分组。

您可以按顺序进行排序

var sorted = list.OrderBy(l => l.FirstName).ThenBy(l => l.LastName).ThenBy(l => l.MiddleName).ToList();

您能显示预期的输出吗?重复计数对订单是否重要,以便重复最多的项目位于顶部?@Tim Schmelter是的,计数很重要。您说得对,最多的重复项将位于顶部。@AdnanYaseen:那么,不仅重复属性计数重要,而且重复组计数也重要,什么具有最高优先级?它是否简化了,以至于你真的想要一种方法,如果有10个或更多属性,这种方法也能起作用?@Tim Schmelter的基本思想是对所有coulmn进行分组,任何数量。重复属性的优先级高于重复组。我将为用户提供过滤器选项。因此,通过dfeault,在本例3中,它是所有列上的组,可以更小。不考虑重复列计数或重复组的大小。不考虑重复列计数或重复组的大小。@huMpty duMpty如果不需要重复列计数,它是完美的+1用于及时回答。@AdnanYaseen:它非常适合不同的要求。不offense@AdnanYaseen它的结果与您在Q中显示的预期输出完全相同。也许您应该扩展预期的Output@AdnanYaseen:您能否提供发生重复的示例?
var sorted = list.OrderBy(l => l.FirstName).ThenBy(l => l.LastName).ThenBy(l => l.MiddleName).ToList();
var result = list.OrderBy(t => t.FirstName).ThenBy(t => t.LastName).ThenBy(t => t.MiddleName);