我有几个表由关联连接,表Skew的记录与添加数据的日期不同(列“已更新”)。我正在尝试查询表以仅为表Skew中的最新记录提取列表,而不是所有记录。
例如,下面的行正确地从表Skew中提取最新记录和值A.
double A = DATActx.Skews.OrderByDescending(B => B.Updated).
Where(B => B.DealContract == "AP-20-Oct-16").
Select(B => B.BookA).First();
下面的查询会提取所有记录,而不仅仅是最新记录。
var ListData = DATActx.Books.
OrderByDescending(B => B.Option.Skews.Updated).
Where(B => B.DealContract != null).
Select(B => new clsMonteCarlo.Leg()
{
BookID = B.ID,
DealNo = B.DealNo,
DealContract = B.DealContract,
BookA = B.Option.Skews.BookA // one item in Book links to many in Skews - need to only select the latest record
}).ToList();
如何修改第二个查询以仅返回表Skew中的最新记录?下面的查询(以及我尝试的其他变体)无法编译。
var ListData = DATActx.Books.
OrderByDescending(B => B.Option.Skews.Updated).
Where(B => B.DealContract != null).
Select(B => new clsMonteCarlo.Leg()
{
BookID = B.ID,
DealNo = B.DealNo,
DealContract = B.DealContract,
BookA = B.Option.Skews.BookA // one item in Book links to many in Skews - need to only select the first record
}).First().ToList();
感谢您的帮助。
答案 0 :(得分:2)
First().ToList();
这部分没有意义。 First()将返回Book类的实例,该实例可能没有定义ToList()。只需删除ToList(),您就可以获得所需的记录。
更新
根据您的回答,您需要一个有序的groupby。
var ListData = DATActx.Books.
Where(B => B.DealContract != null).
Select(B => new clsMonteCarlo.Leg()
{
BookID = B.ID,
DealNo = B.DealNo,
DealContract = B.DealContract,
BookA = B.Option.Skews.BookA,
Updated = B.Updated
}).GroupBy(g=>g.DealContract).Select(gr=>gr.OrderByDescending(b=>b.Updated).First());