如何使用查询表达式为每个项目选择最后n个历史记录

时间:2019-06-13 09:29:45

标签: c# dynamics-crm dynamics-crm-2011 query-expressions

我需要使用Microsoft XRM sdk查询表达式通过Windows服务查询SQL数据库,并且遇到了一个要求,我必须为每个项目选择最后n条历史记录,这样才能转换为SQL:

SELECT 
RecentPrices.ProductId, 
Product.[Description], 
RecentPrices.Price, 
RecentPrices.DateChanged 
FROM 
( 
    SELECT 
        ProductId, 
        Price, 
        DateChanged, 
        Rank() over 
        ( 
            Partition BY ProductId 
            ORDER BY DateChanged DESC 
        ) AS Rank 
    FROM PricingHistories 
) RecentPrices 
JOIN ProductMaster Product 
ON RecentPrices.ProductId = Product.Id 
WHERE Rank <= 10 

它应该输出具有最近10次价格更改历史记录(价格和日期更改)的产品列表 可以分组为C#IEnumerable,例如:

产品

  • 编号:数字
  • 说明:字符串
  • PriceChangesLastTenPreview []:对象数组

在一个查询中使用查询表达式是否有可能做到这一点?还是我不得不诉诸于每条记录进行查询?

请帮助

1 个答案:

答案 0 :(得分:0)

如果您检索了所有价格变化记录,则可以将它们分组,然后从每个分组中Take(10)进行分组。

如果您有日期截止日期而不是前10天,则可以查询该日期之后的所有价格变化,然后将其分组。

如果您只想检索每条记录的前10名,我认为您必须查询每条记录。您可能需要考虑使用ExecuteMultiple来批量查询。