示例在这里,应该在在线编译器中工作:
internal class Program
{
static void Main(string[] args)
{
var i1 = new Item();
i1.Val1 = 1;
i1.Val2 = 2.1;
var i2 = new Item();
i2.Val1 = 1;
i2.Val2 = 1.5;
var i3 = new Item();
i3.Val1 = 3;
i3.Val2 = 0.3;
var list = new List<Item>
{
i1,
i2,
i3
};
var grouped = list.GroupBy(x => x.Val1);
Program p = new Program();
foreach(var group in grouped)
p.Func(group);
}
public void Func(IGrouping<int, Item> list)
{
list.OrderBy(x => x.Val2); //list will be ordered, but not saved
list = (IGrouping<int, Item>)list.OrderBy(x => x.Val2); //exception
}
}
public class Item
{
public int Val1 { get; set; }
public double Val2 { get; set; }
}这是我想要做的事情的简化代码--我需要在Func中订购列表,但是我不知道怎么做。第一行理论上有效,但由于它不是一个空白,它在实践中不起作用-列表实际上并不是有序的。
第二行应该可以,实际上Visual建议这样做,但是它会引发运行时异常- Unable to cast object of type System.Linq.OrderedEnumerable to System.Linq.IGrouping。
我暂时没有想法了,但是没有办法绕过它--我绝对需要在那里订购它。
编辑
我目前的解决方案是使用Select(x => x)将IGrouping扁平化为普通List,这样我就可以轻松地排序和编辑值,而不会丢失对grouped的引用。如果你真的想保留IGrouping,那么你运气不好,似乎是不可能的。
发布于 2022-11-12 17:34:28
尝尝这个。
var grouped = list.GroupBy(x => x.Val1).Select(a=> a.OrderBy(a=>a.Val2).ToList());OrderBy返回IOrderedEnumerable,您不能将其转换为IGrouping
发布于 2022-11-12 17:58:05
您的示例代码没有显示您要达到的目的。
list.OrderBy(x => x.Val2); //list will be ordered, but not savedOrderBy不按原样订购现有的集合。它实际上返回了一个新集合。
list = (IGrouping<int, Item>)list.OrderBy(x => x.Val2); //exceptionOrderBy返回一个IOrderedEnumerable<TElement>。IOrderedEnumerable<TElement>和IGrouping<TKey,TElement>都是从IEnumerable<TElement>派生的,但是不能将IOrderedEnumerable转换为IGrouping。
如果您只想写出值,那么Func可以是:
public IEnumerable<Item> Func(IGrouping<int, Item> list)
{
return list.OrderBy(x => x.Val2);
}而foreach循环可以是:
foreach(var group in grouped)
{
var orderedList = p.Func(group);
Console.WriteLine($"group: {group.Key}");
foreach (var value in orderedList)
{
Console.WriteLine($" {value.Val2}");
}
}希望这能帮上忙。
发布于 2022-11-13 09:17:40
在末尾使用First方法,以便获得有序项的IGrouping集合。
public void Func(IGrouping<int, Item> list)
{
list = list.OrderBy(x => x.Val2).GroupBy(x => x.Val1).First();
}https://stackoverflow.com/questions/74414995
复制相似问题