我的MySQL数据库中有以下值
Date High_Low_Price
5/18/2017 302
5/19/2017 315.3
5/22/2017 Null
5/23/2017 Null
5/24/2017 Null
5/25/2017 Null
5/26/2017 Null
5/29/2017 Null
我已经用以下格式创建了一个列表
List<db1> StockData = new List<db1>();
db1 newStock = new db1();
newStock.High_Low_Price = (double)reader["High_Low_Price"];
StockData.Add(newStock);
如何在列表中找到最后一个非null元素(即i)的位置。当我指的是最后一个元素时,我在2017年5月19日引用了High_Low_Price的315.3。
High_Low_Price列中的Null值将保持不变。那我怎么能找到这个列表中有值的最后一个日期呢?
编辑:我需要两件事,即日期和职位。
答案 0 :(得分:1)
var date = StockData.Where(lst=>lst.High_Low_Price!=null).OrderByDescending(lst=>lst.Date).FirstOrDefault().Date;
答案 1 :(得分:1)
怎么样
var row = StockData.OrderByDescending(x => x.Date)
.FirstOrDefault(x => x.High_Low_Price.HasValue);
if (row != null) // In case above query don't return anything
// cause all rows have blank High_Low_Price
{
var result = row.ModifiedDate;
}
答案 2 :(得分:1)
int position = StockData.IndexOf(
StockData.Where(lst=>lst.High_Low_Price!=null).OrderByDesc(lst=>lst.Date).FirstOrDefault()
);
var lastDate = StockData[position]?.Date;
答案 3 :(得分:1)
假设您的数据已经从原始数据库查询开始按顺序排列:
var idx = StockData.Select((data,idx) => new { data, idx})
.Where(x => x.data.High_Low_Price != null).FirstOrDefault()?.i;
答案 4 :(得分:1)
假设High_Low_Price的类型可以为空,例如&#39; double?&#39;
var lastDate = StockData.Last(x => x.High_Low_Price.HasValue).Date;
答案 5 :(得分:1)
由于你在一篇评论中提到Null值总是在列表的末尾,然后假设是这种情况,因为你只想要元素的位置及其日期,一个天真的方法来解决这个问题就是做
var i = 0;
var pos = 0;
DateTime? date = null;
while (i < StockData.Count && StockData.ElementAt(i)?.High_Low_Price != null )
{
pos = i;
date = StockData.ElementAt(i).Date;
i++;
}