我知道已经有很多问题了,但由于类型转换(我认为),我仍然无法让它工作。
我有一个自定义类列表,我通常根据用户选择按月(mt)或季度(qr)对它进行分组。这工作正常。但是,现在我请求允许按 Q413 和 2013 年剩余时间进行分组。Mt 和 Qr 是字符串。Quartpos 是一个 double 并且等于 4 如果只有 Q4 是季度和几个月休息。
这是我所拥有的:
List<MyClass> results = classlist
.GroupBy(a => new {
a.rg,
a.tar,
a.mt = ((double.Parse(a.qr) < quartpos) ? a.mt : 0),
a.qr })
.Select(g => new MyClass {
RG = g.Select(a => a.rg).First(),
tar = g.Select(a => a.tar).First(),
yr = g.Select(a => a.yr).First(),
qr = g.Select(a => a.qr).First(),
mt = g.Select(a => a.mt).First(),
pp = g.Average(a => double.Parse(a.pp)),
pi = g.Sum(a => double.Parse(a.pi)),
cp = g.Average(a => double.Parse(a.cp)),
ci = g.Sum(a => double.Parse(a.ci)),
it = g.Sum(a => double.Parse(a.it)),
to = g.Sum(a => double.Parse(a.to)),
cnt = g.Select(a => a.dt).Distinct().Count(),
pdvol = g.Sum(a => (double.Parse(a.pp) <= 1)
? 0
: (double.Parse(a.pi) / double.Parse(a.pp))) })
.ToList();
这会引发两个错误:
String Int 类型转换 - 因为 mt 是 string 但 : 0 是 int
无效的匿名类型成员声明。
我完全知道我必须在选择中使用相同的语法,以确保如果按季度分组,则选择季度,如果按月分组,则选择月份。
类的定义:
public class Myclass
{
public string yr;
public string qr;
public string mt;
public string cw;
public string tar;
public string RG;
public double pp;
public double pi;
public double cp;
public double ci;
public double it;
public double to;
public double pd;
public double cd;
public double fp;
public double fi;
public double fd;
public int cnt;
public double pdmw;
public double pdvol;
}
classlist
是一个所有变量都是字符串的类 - 直接来自 csv 导入。
我的问题是如何有条件地对月份 (mt) 进行分组?