C# OrderBy数字和ThenBy布尔值不适用于列表
我有一个对象列表,我试图通过两次迭代排序 第一种是通过对象中的整数字段(即1-1000)按升序对对象进行排序,然后通过对象中的布尔字段按真布尔值和假布尔值进行排序 我所拥有的是C# OrderBy数字和ThenBy布尔值不适用于列表,c#,linq,sorting,C#,Linq,Sorting,我有一个对象列表,我试图通过两次迭代排序 第一种是通过对象中的整数字段(即1-1000)按升序对对象进行排序,然后通过对象中的布尔字段按真布尔值和假布尔值进行排序 我所拥有的是 public void updateAdapter() { List<Object> foobar = db.Get(ObjectID); foobar = foobar.OrderBy(s => int.Parse(s.Tag)).ThenByDesc
public void updateAdapter()
{
List<Object> foobar = db.Get(ObjectID);
foobar = foobar.OrderBy(s => int.Parse(s.Tag)).ThenByDescending(s => s.Duplicate).ToList();
adapter = new ListAdapter(this, foobar);
RunOnUiThread(() => adapter.NotifyDataSetChanged());
ListView.Adapter = adapter;
}
任何帮助都是巨大的帮助。谢谢你对orderby thenby所做的事情的理解是完全相反的 您错误地认为orderby首先按整数对列表进行排序,然后按布尔属性对列表进行稳定的重新排序。这将把所有的真放在一起,按整数排序,所有的假放在一起,按整数排序 它不是这样做的 orderby按整数对列表进行排序,然后thenby将两条记录排序为同一整数的所有位置,并按Boolean属性对该子列表进行排序 这应该符合你的直觉。如果我递给你一堆有数字和字母的卡片,说先按数字再按字母排序,然后我递给你3A,2B,2A,3B,结果是2A,2B,3A,3B,而不是2A,3A,2B,3B,对吗 所以你想撤销你的条款。一阶布尔运算;那将把所有的真与假放在一起。然后对integer属性执行thenby,所有True将按integer排序,所有False将按integer排序
也就是说,LINQ to对象中的orderby需要作为稳定的排序来实现,因此如果您真的想以艰难的方式实现它,您可以对integer属性执行一个orderby,然后对布尔属性执行第二个orderby,您将得到正确的结果。但这是浪费,因为它会对整个列表进行两次排序,而不是对整个列表进行一次排序,然后对每个子列表进行排序。排序两个半列表通常比排序一个整列表便宜 你能提供输入和输出数据的样本吗?听起来你实际上想先按
replicate
排序,然后按Tag
排序。当然可以。将添加我得到的和我想要的:)这真是信息量大!事实上,我确实认为是OrderBy,然后按我想要的方式点菜。我也很欣赏使用LINQ进行订购的更好方式。这确实帮助并解决了我的问题:)。谢谢你,埃里克。
Lists of Objects Inputted:
FooBar(11, false),
FooBar(1, false),
FooBar(54, true),
FooBar(34, true)
FooBar(77, false),
FooBar(33, false)
List of Objects Outputted:
FooBar(1, false),
FooBar(11, false),
FooBar(33, false),
FooBar(34, true),
FooBar(54, true),
FooBar(77, false),