![](/img/trans.png)
[英]how to Order a DataTable By more than one condition using AsEnumerable().OrderBy?
[英]How to orderby more then one parameter in the same weight?
我试图制作一个按多个参数对对象进行排序的程序。 我需要 order by 对所有参数具有相同的权重。 我需要使用哪些功能才能获得该结果?
我尝试使用OrderBy()
然后 - ThenBy()
但它首先对第一个参数进行排序,因此排序不相等。
values = File.ReadAllLines(filepath)
.Skip(1)
.Select(v => Fund.FromCsv(v))
.OrderByDescending(x => x.sharp)
.ThenBy(x=>x.yearlychange)
.ToList();
例如,您可以以股票市场为例,在这种情况下,我想按去年的收益率排序股票,但也按标准差排序。 通过这种方式,我可以获得去年收益率最高但标准差也最好的股票。 它不会是所有产品中最好的,它会被合并。
正如您已经了解的那样,这并不是一个真正的程序问题,更像是算法/领域问题。 不过,如果您已经拥有该算法,那么您当然可以这样做。 (基于您在评论中提供的示例)
void Main()
{
var funds = new List<Fund>();
funds.Add(new Fund() { Age = 18, Money = 100000 });
funds.Add(new Fund() { Age = 20, Money = 101000 });
//Here is normally your code with loading it from CSV
//File.ReadAllLines(filepath)
// .Skip(1)
// .Select(v => Fund.FromCsv(v))
var value = funds.OrderBy(t => t.SortingFactor);
}
public class Fund
{
public int Age { get; set; }
public decimal Money { get; set; }
public decimal SortingFactor
{
get
{
//Here is your domain algorithm you must sort out first (your example data would be)
return Money / Age;
}
}
}
我不确定我是否完全理解您的目标,但如果资金不是您可以修改的代码,另一种选择是您的订单中的匿名 object,例如
values = File.ReadAllLines(filepath)
.Skip(1)
.Select(v => Fund.FromCsv(v))
.OrderByDescending(x => new { x.sharp, x.yearlychange })
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.