获取仅选择一个表中的最新记录的记录列表

时间:2016-09-03 04:55:43

标签: c# linq-to-sql one-to-many

我有几个表由关联连接,表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();

感谢您的帮助。

1 个答案:

答案 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());