我能够获得最高的 date列值,但是我希望整个单个数据行的日期都最高。
DataTable dt = new DataTable();
dt.Columns.Add("City Name");
dt.Columns.Add("date");
dt.Rows.Add("Mumbai", "17/07/2018");
dt.Rows.Add("Surat", "17/02/2018");
dt.Rows.Add("Borivali", "17/10/2018");
dt.Rows.Add("Pune", "10/05/2018");
dt.Rows.Add("Valsad", "17/09/2018");
var query = dt.AsEnumerable().Max(x => x[1]);
答案 0 :(得分:0)
创建一个类PersonModel
来承载DataTable中的属性。
您需要将"17/07/2018"
字符串设为DateTime,因此请使用DateTime.ParseExact
方法。
然后,PersonModel
类需要实现IComparable
接口,以告诉MAX
函数如何进行比较。
public class PersonModel : IComparable
{
public string Name { get; set; }
public DateTime Dt { get; set; }
public int CompareTo(object obj)
{
var compareObj = obj as PersonModel;
return compareObj.Dt > this.Dt? 0:1;
}
}
var query = dt.AsEnumerable().Max(x =>
new PersonModel {
Name = x[0].ToString(),
Dt = DateTime.ParseExact(x[1].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture)
}
);
答案 1 :(得分:0)
首先,我建议更改格式:使用DateTime
时为什么要使用String
?
DataTable dt = new DataTable();
dt.Columns.Add("City Name");
dt.Columns.Add("date");
dt.Rows.Add("Mumbai", new DateTime(2018, 7, 17));
dt.Rows.Add("Surat", new DateTime(2018, 2, 17));
dt.Rows.Add("Borivali", new DateTime(2018, 10, 17));
dt.Rows.Add("Pune", new DateTime(2018, 5, 10));
dt.Rows.Add("Valsad", new DateTime(2018, 9, 17));
您正在寻找标准 Linq 不支持的ArgMax
,但可以通过{{1 }}:
Aggregate
结果:
var row = dt
.AsEnumerable()
.Aggregate((s, a) => Convert.ToDateTime(s[1]) > Convert.ToDateTime(a[1]) ? s : a);
Console.Write($"{row[0]} {row[1]:dd/MM/yyyy}");
如果您坚持使用原始格式,则必须将 Borivali 17/10/2018
解析为string
:
DateTime