首页 > 解决方案 > 在具有附加条件的子列表上应用日期过滤器c#Linq

问题描述

我有一个模型,属性如下

Subscription
------------
 Number 
 Id
 SubscriptionLines
    [ProductNo
    StartDate] 

我现在正在尝试在 ProductNo 上找到一个匹配的订阅并使用这个 linq

List<Subscription> _subscriptions = (from i in _subscriptions
                                     where i.SubscriptionLines.Any(l => l.ProductNo == isbn) 
                                     select i).ToList();

我必须在StartDateie 上应用一个条件,以获取具有 StartDate 的最近值的订阅并匹配 ProductNo

s123
1
[
    {
    9876
    31-2-2019
    }
    {
    456
    31-1-2020
    }
]

s456
2
[
    {
    9876
    12-2-2020
    }
    {
    456
    31-1-2020
    }
]

s756
2
[
    {
    986
    12-2-2020
    }
    {
    456
    31-1-2020
    }
]

从这组样本数据中,我们有 2 个匹配产品编号 9876,但我们需要获取具有最近日期的匹配,在这种情况下它是 s456,值为 12-2-2020

可以对查询进行哪些调整以添加日期参数?

标签: c#linq

解决方案


如果您的意图是通过 isbn 和 max StartDate 获取 ProductNo 和 StartDate,试试这个。

我不确定这是否是一个好的解决方案。

var _subscriptions = (from i in subscriptions
                      where i.SubscriptionLines.Any(l => l.ProductNo == isbn)
                      select i)
                        .SelectMany(m => m.SubscriptionLines)
                        .GroupBy(o => o.StartDate)
                        .Select(grp => grp.OrderByDescending(grpElm => grpElm.StartDate)).First().ToList();

推荐阅读