Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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/3/arrays/12.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#_Arrays_List_Sorting - Fatal编程技术网

C# 按对象值对数组排序

C# 按对象值对数组排序,c#,arrays,list,sorting,C#,Arrays,List,Sorting,我有一个名为RateQuote的对象,它具有以下内容: 名称 学期 英里 例如: rate = new RateQuote() { Term = 24, Miles = 120000, Name = '24 mo. / 120000 miles' } 及 及 正在将这些RateQuote添加到RateQuote[]对象: public void AddRate(RateQuote rate) { Rates = Rates.Concat(new RateQuo

我有一个名为RateQuote的对象,它具有以下内容:

名称 学期 英里 例如:

rate  = new RateQuote() {
  Term = 24,
  Miles = 120000,
  Name = '24 mo. / 120000 miles'
}

正在将这些RateQuote添加到RateQuote[]对象:

  public void AddRate(RateQuote rate)
  {
      Rates = Rates.Concat(new RateQuote[] { rate }).ToArray();
  }
在.Concat添加它们之后,我将如何对其进行排序?如果我的代码先添加24个月/120000英里,然后再添加24个月/50000英里,最后添加12个月/50000英里,我希望它按照以下顺序进行排序:

12个月/50000 24个月/50000 24个月/120000
它应该先按月排序,然后按英里排序。我很困惑,希望能得到帮助。我知道我可以使用.Sort函数,但不确定在这种情况下如何使用它。提前感谢您的帮助。

您似乎想先按期限再按里程订购。然后您可以使用:

var sorted = Rates
               .OrderBy(r=> r.Term)
               .ThenBy(r=> r.Miles)
               .ToArray();

您可以使用linq,类似于:

var orderedRates = rates.GroupBy(rq => rq.Term)
                       .OrderBy(g => g.Key)
                       .SelectMany(g => g.OrderBy(rq => rq.Miles))
                       .ToArray();

如果可能的话,在.Concat之前使用.OrderBy进行排序会容易得多。为什么不呢?制作动态数组是一种非常奇怪的方法。你为什么不使用列表?@Dennis,我正在使用的代码是别人写的。这是我未来要解决的问题清单。我的公司有很多事情要做,现在把它改成一个列表并不是最重要的。当我有能力的时候,我会把它列在我的事情清单上。我们的代码库很大,现在需要时间进行更改。谢谢。这不符合OP的要求……先按月份排序,然后按月份排序Miles@Harrison:请正确阅读问题并停止反对投票。@Flyingstrudel,此方法也适用。然而,老实说,我不知道你的和哈比卜的有什么区别。你的代码似乎要多得多。您对此有何看法?@Turp我当时不知道by是一种扩展方法:这是一种基于两个属性对数组进行排序的复杂代码。您首先对集合进行分组,然后对集合进行展平,这也是毫无原因的。这使得代码很难阅读和理解,在生产中应该避免。这对我来说很有效。简单和整理我的清单应该如何。@ Turp,欢迎你,也考虑使用列表而不是数组。通过调用ToArrayI,您总是可以从列表中获得一个数组。Arrayi在我的开发人员位置上使用了一个已经存在的应用程序。我正在慢慢地,但肯定地,纠正这样的事情,使我们的平台更快,让所有人都感到愉快。这是我要做的事情列表中的一部分,但现在,我只需要在列表显示之前对其进行排序。由于合规性问题。谢谢
var sorted = Rates
               .OrderBy(r=> r.Term)
               .ThenBy(r=> r.Miles)
               .ToArray();
var orderedRates = rates.GroupBy(rq => rq.Term)
                       .OrderBy(g => g.Key)
                       .SelectMany(g => g.OrderBy(rq => rq.Miles))
                       .ToArray();