从自定义 class 对象列表中获取那些元素,这些对象的一个 属性 值可解析为 double
Get those elements from a List of custom class objects whose one property value is parseable to double
我在 C# 中有一个自定义 class 对象列表,其 class 结构如下:
public class ABC
{
int ID;
string Text1;
string Text2;
}
这个列表存储这样的数据:
+-----+-------+--------+
| ID | Text1 | Text2 |
+----------------------+
| 1 | PQR | test1 |
| | | |
| 2 | XYZ | 12.69 |
+-----+-------+--------+
我正在尝试获取具有不同 ID
的行,如下所示:
ABCObject = ABCObject.GroupBy(c => c.ID).Select(c => c.First()).ToList();
一切正常。但是,我想添加另一个条件,即 ABCObject
应该只包含那些具有 double
数据的行。在上面给定的情况下,它是 ID = 2
的行。那么,是否可以在 LINQ 中执行此操作?或者我必须创建另一个函数,它将 运行 一个 foreach
循环并使用 double.TryParse()
?
测试每个元素
您可以在 LINQ 中使用 double.TryParse
,尽管不可否认 out
参数很烦人:
ABCObject = ABCObject
.Where(x => { double ignored; return double.TryParse(x => x.Text2, out ignored); }
.GroupBy(c => c.ID)
.Select(c => c.First())
.ToList();
您可以使用您自己的可重用方法使此更清洁,该方法使用可空类型而不是 bool+out 到 return 结果:
private static double? NullableTryParseDouble(string text)
{
double result;
return double.TryParse(text, out result) ? result : default(double?);
}
然后:
ABCObject = ABCObject
.Where(x => NullableTryParseDouble(x.Text2) != null)
.GroupBy(c => c.ID)
.Select(c => c.First())
.ToList();
我在 C# 中有一个自定义 class 对象列表,其 class 结构如下:
public class ABC
{
int ID;
string Text1;
string Text2;
}
这个列表存储这样的数据:
+-----+-------+--------+
| ID | Text1 | Text2 |
+----------------------+
| 1 | PQR | test1 |
| | | |
| 2 | XYZ | 12.69 |
+-----+-------+--------+
我正在尝试获取具有不同 ID
的行,如下所示:
ABCObject = ABCObject.GroupBy(c => c.ID).Select(c => c.First()).ToList();
一切正常。但是,我想添加另一个条件,即 ABCObject
应该只包含那些具有 double
数据的行。在上面给定的情况下,它是 ID = 2
的行。那么,是否可以在 LINQ 中执行此操作?或者我必须创建另一个函数,它将 运行 一个 foreach
循环并使用 double.TryParse()
?
您可以在 LINQ 中使用 double.TryParse
,尽管不可否认 out
参数很烦人:
ABCObject = ABCObject
.Where(x => { double ignored; return double.TryParse(x => x.Text2, out ignored); }
.GroupBy(c => c.ID)
.Select(c => c.First())
.ToList();
您可以使用您自己的可重用方法使此更清洁,该方法使用可空类型而不是 bool+out 到 return 结果:
private static double? NullableTryParseDouble(string text)
{
double result;
return double.TryParse(text, out result) ? result : default(double?);
}
然后:
ABCObject = ABCObject
.Where(x => NullableTryParseDouble(x.Text2) != null)
.GroupBy(c => c.ID)
.Select(c => c.First())
.ToList();