gpt4 book ai didi

c# - 如何使用流利的 LINQ 将 TryParse 应用于多个属性?

转载 作者:行者123 更新时间:2023-11-30 20:27:40 24 4
gpt4 key购买 nike

我有一个对象列表。对象看起来像这样

public class GenericRecord
{
public string GroupName { get; set; }
public DateTime CreatedAt { get; set; }
public string Col1 { get; set; }
public string Col2 { get; set; }
public string Col3 { get; set; }
public float ConvertedCol1 { get; set; }
public float ConvertedCol3 { get; set; }
public float ConvertedCol3 { get; set; }
}

我想使用 Fluent LINQ 来解析 Col1Col2Col3 属性,然后对它们求和。

我想做这样的事

IEnumerable<GenericRecord> records = ...;
var summaries = records.Select(x => new GenericRecord
{
float.TryParse(x.Col1, out ConvertedCol1),
float.TryParse(x.Col2, out ConvertedCol2),
float.TryParse(x.Col3, out ConvertedCol3),
GroupName => x.GroupName
}).GroupBy(x => x.GroupName)
.Select(x => new {
GroupName = x.Key,
Total1 = x.Sum(y => y.ConvertedCol1),
Total2 = x.Sum(y => y.ConvertedCol2),
Total3 = x.Sum(y => y.ConvertedCol3),
Count = x.Count()
}).ToList();

但是,linq 中的 float.TryParse 语法不起作用。

如何使用 Fluent LINQ 解析多列?

最佳答案

将处理放在一个方法中:

private static GenericRecord ConvertGenericRecord(GenericRecord x) {
float c1, c2, c3;
float.TryParse(x.Col1, out c1);
float.TryParse(x.Col2, out c2);
float.TryParse(x.Col3, out c3);
return new GenericRecord {
ConvertedCol1 = c1;
ConvertedCol2 = c2;
ConvertedCol3 = c3;
GroupName = x.GroupName
};
}

使用方法如下:

var summaries = records
.Select(ConvertGenericRecord)
.GroupBy(x => x.GroupName)
.Select(x => new {
GroupName = x.Key,
Total1 = x.Sum(y => y.ConvertedCol1),
Total2 = x.Sum(y => y.ConvertedCol2),
Total3 = x.Sum(y => y.ConvertedCol3),
Count = x.Count()
}).ToList();

TryParse 的调用在 EF 或 LINQ2SQL 中不起作用。如果您从数据库读取,请在调用 ConvertGenericRecord 之前添加 AsEnumerable()ToList()

如果转换必须在数据库端进行,请将 TryParse 替换为 SqlFunctions.StringConvert(...) ( detailed Q&A )。

关于c# - 如何使用流利的 LINQ 将 TryParse 应用于多个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48390148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com