请教如何使用lambda分组后排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教如何使用lambda分组后排序相关的知识,希望对你有一定的参考价值。
参考技术A from d in datagroup d by d.Name into g
select new
Id = g.Max(g => g.Id),
Name = g.Where(g => g.Id == Id).Name
使用lambda表达式按字段排序
我试图通过其中一个字段来排序列表。
我在一个分组列表中有两个列表。第一个包含Id,第二个包含计数。我成功地能够按Id对列表进行分组并重新格式化。
for (int i = 0; i < GroupedListofLists.Count; i++)
{
tempo_Id.Add(GroupedListofLists[i][0]);
tempo_count.Add(GroupedListofLists[i][1]);
}
GroupedListofLists.Clear();
GroupedListofLists.Add(tempo_Id);
GroupedListofLists.Add(tempo_count);
如果我打印出GroupedListofLists,我会有不同的ID(GroupedListofLists [0]),每个ID都在第二个(GroupedListofLists [1])。
现在,当我尝试使用lambda表达式对此列表进行排序时,我遇到了问题。我尝试了这两种方法:
GroupedlistofLists.Sort( (a, b) => Convert.ToDouble(a[idx]).CompareTo(Convert.ToDouble(b[idx])));
和
GroupedlistofLists = GroupedlistofLists.OrderBy(x => Convert.ToDouble(x[idx])).ToList();
出现了一个问题。
在第一种方法中,无论我用于变量'idx'的值是什么,a都将被赋予GroupedListofLists [0]的值,并且b将被赋予GroupedListofLists [1]的值。
在第二个中,无论我使用什么值变量'idx'(0或1),x都将包含GroupedListofLists [0]的值。哪个是Id值,我需要按Count排序它们,所以GroupedListofLists [1]。
我希望我很清楚。先感谢您。
我并不知道你想要做什么。但我会猜测:
// Build some List you want to sort
List<string> myList = new List<string>() { "3", "1", "2" };
// Sort the List
myList = myList.OrderBy(a => Convert.ToDouble(a));
OrderBy中的Lambda-Expression需要选择一个以默认方式排序的值。 Lambda-Expression将针对列表中的每个项目运行。结果将用作订单键。你不需要任何索引。可以使用排序以对复杂类型进行排序。
更好的版本应该在具有正确类和类型的List上工作。应避免在lambda表达式内转换!
// Some example-class with multiple properties
public class MyItem
{
public string Name { get; set; }
public double Value { get; set; }
}
// Some test-data
List<MyItem> myList = new List<MyItem>()
{
new MyItem() { Name = "One", Value = 1 },
new MyItem() { Name = "Three", Value = 3 },
new MyItem() { Name = "Two", Value = 2 }
}
// select the value you want to use for ordering the list.
myList = myList.OrderBy(item => item.Value);
// Expected output: 1, 2, 3
foreach(MyItem item in myList)
{
Console.WriteLine(item.Value + ", " + item.Name);
}
// Expected output: 3, 2, 1
myList = myList.OrderBy(item => item.Name);
foreach(MyItem item in myList)
{
Console.WriteLine(item.Value + ", " + item.Name);
}
(我没有安装Visual Studio,所以检查拼写错误;))
以上是关于请教如何使用lambda分组后排序的主要内容,如果未能解决你的问题,请参考以下文章