获取基于最新条目的所有项目的列表

本文关键字:列表 项目 于最新 最新 获取 | 更新日期: 2023-09-27 18:10:34

我的数据集的形状是这样的:

public class PriceList
{
    [Display(Name = "Price List ID")]
    public int m_ID { get; set; }
    [Display(Name = "Price List Provider")]
    public int m_Provider { get; set; }
    [Display(Name = "Current Book")]
    public int m_BookID { get; set; }
    public BookInfo m_Book { get; set; }
    [Display(Name = "Price")]
    public decimal m_Price { get; set; }
    [Display(Name = "Date of price list")]
    public DateTime m_PriceListDate { get; set; }
}

Price list是当我在mvc应用程序中获得特定项目的价格时创建的价格列表对象。可以在同一天、一周、一个月或一年内多次创建。

所以现在一本书可以是一个类别的一部分,例如"漫画书"。我的问题是,我试图创建一个方法,将只给我LATEST条目,所以最近的日期,基于这个集合的所有项目。

方法:

    public List<PriceList> ListLatestPriceListByBookCategoryID(int _id)
    {
        List<PriceList> listToReturn = new List<PriceList>();
        var priceListQry = from pl in m_Db.PriceList
                           where pl.Book.BookCatID == _id
                           // INSERT CODE HERE???
                           select pl;
        if (!priceListQry.Any())
        {
            return null;
        }
        listToReturn.AddRange(priceListQry);
        return listToReturn;
    }

基本上,我想创建一个只返回所需数据的查询。这个需要的数据只包含id找到的每本书的最近条目。我可以有很多种类和很多书。

谁能帮我想出一个好方法来做这件事?到目前为止,我所想到的只是一个庞大的方法,可以遍历整个列表以过滤所有不必要的数据,但我想要一些更有效的方法,因为我最终会有大量的数据,这将证明要花费很多时间。

* EDIT *

到目前为止,我已经添加了这行代码:
var result = m_Db.PriceList.GroupBy(r => r.BookID).Select(r => new
                {
                    BookID = r.OrderByDescending(t => t.PriceListDate).First().BookID,
                    PriceListDate = r.OrderByDescending(t => t.PriceListDate).First().PriceListDate
                });

这行代码没有错误,这对我来说是有意义的。但是,listToReturn.AddRange(result)行现在抛出这个错误:

Error 13 Argument 1: cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<MyApp.Models.Entities.PriceList>

获取基于最新条目的所有项目的列表

您可以尝试:

var result = m_Db.PriceList.GroupBy(r => r.m_BookID)
                 .Select(r=> new 
                 { 
                     BookID = r.OrderByDescending(t=> t.m_PriceListDate).First().m_BookID,
                     Date = r.OrderByDescending(t=> t.m_PriceListDate).First().m_PriceListDate,
                 });

(我不确定这有多有效)