【发布时间】:2019-11-18 19:45:05
【问题描述】:
在下面的代码块中,我的DataTable TelemetryFile 已正确填充。第一个 MessageBox 显示 4。
它还正确地包含一个名为 FixName 的列。第二个 MessageBox 显示 FixName。
但是,当我尝试创建表中不同 FixName 值及其出现频率的 List 时,出现了问题。 sortedCountsByName 为 null,第三个 MessageBox 显示 Hmm。
我做错了什么?
public List<(string FixOrReportName, long CountInTelemetryFile)> GetMostPopularOptionsFromTelemetryFile(string typeToReturn, int maxOptionsToReturn)
{
this.TelemetryFile.DefaultView.RowFilter = "FixOrReport = '" + typeToReturn + "'";
MessageBox.Show(this.TelemetryFile.DefaultView.Count.ToString());
MessageBox.Show(this.TelemetryFile.Columns[3].ColumnName);
var sortedCountsByName = (
this.TelemetryFile.AsEnumerable()
.GroupBy(x => x.Field<string>("FixName"))
.Select(x => new Tuple<string, long>(x.Key, x.Count()))
) as List<(string FixOrReportName, long CountInTelemetryFile)>;
if (sortedCountsByName is null)
{
MessageBox.Show("Hmm");
return null;
}
else
{
sortedCountsByName.Sort(
delegate (
(string FixOrReportName, long CountInTelemetryFile) firstPair,
(string FixOrReportName, long CountInTelemetryFile) nextPair)
{
return -1 * firstPair.CountInTelemetryFile.CompareTo(nextPair.CountInTelemetryFile);
}
);
}
return sortedCountsByName.Take(maxOptionsToReturn).ToList();
}
【问题讨论】:
-
您将旧的
Tuples 与新的 C#7 值元组混合在一起。删除as转换并从那里继续。 -
@GertArnold 出于好奇,有没有办法让我在 LINQ 查询中使用新的 C#7 元组?我尝试了几件事,但无法成功。
-
@puzzlepiece87 随便
Select(x => (x.Key, x.Count()) -
@juharr 我听从了你的建议,尽管使用
Convert.ToInt64(x.Count())来使类型匹配。不幸的是,仍然返回 null。