gpt4 book ai didi

c# - 根据具有不同值的最近可用时间从 SQL 中检索项目

转载 作者:行者123 更新时间:2023-12-04 10:01:32 27 4
gpt4 key购买 nike

当前数据库结构为:
表:fxRates字段:createdOn , Value我也有 List<string> fxLookupList和每个 string对象可以对应一个fxRate值(value)属性。
我想要做的是获取包含具有相同 Value 的任何项目的所有 fxRates来自 List<FxLoopUp>通过按照 .Where(fx => fxLookUpList.Contains(fx.Value)) 的方式做一些事情
但是,由于 fxLookupList 有多个值,我不知道如何获取所有 fxRates鉴于这些应包含来自 fxLookupList 的所有值,具有最接近的前一个或匹配的今天的日期.
感谢帮助!
一些解释(注意今天,昨天等实际上是日期时间值)

Data Source:
------------------------------
TODAY TEST
YESTERDAY HELLO
YESTERDAY HI
YESTERDAY HELLO
BEFORE YESTERDAY HEY
BEFORE YESTERDAY HI
A WEEK AGO HELLO
A WEEK AGO HEY

Assuming fxLookUpList will have "HELLO" and "HI";

Output =>
YESTERDAY | HELLO
YESTERDAY | HI

Assuming fxLookUpList will have "HEY" and "HI";

Output =>
YESTERDAY | HELLO
BEFORE YESTERDAY | HEY

Assuming fxLookUpList will have "TEST" and "HEY";

Output =>
TODAY | TEST
BEFORE YESTERDAY | HEY

最佳答案

由于问题的措辞,我不得不猜测,但如果我理解正确,我相信这会做到:

    fxRates
.Where(fx => fxLookUpList.Contains(fx.Value) && fx.createdOn <= today)
.GroupBy(fx => fx.Value)
.Select(fxGrp => fxGrp.OrderByDesc(fx => fx.createdOn).FirstOrDefault());
.Where()显然过滤到只有 fxLookupList 中的值.此时,结果集会包含多条记录相同值但不同 createdOn的记录。日期,如果我正确理解了这个问题,那么您就是今天日期/之前的每个值的最新值。所以我们也过滤了 .Where筛选 cratedOn <= today ,其中 today预计是 DateTime 变量,包含要过滤的确切时间(不想假设这意味着什么,但你也可以只写 DateTime.UtcNow)

在此之后,我们 .GroupBy值,以便每个分组集将包含给定值的所有 fxRates 与今天之前的所有日期(已在 .Where 中过滤)。

最后,我们通过按 .Select 对上述分组进行降序排列来投影( createdOn )最近​​的日期。 , 以 .FirstOrDefault()为您提供最新的项目(再次过滤为 <= 今天)。

最后请注意,在逻辑上我们将使用 .First()在选择中,但不能,因为 EF 在查询中不允许这样做。或者你可以做一个 .ToArray()在 GroupBy 之后并使用 .First()在内存中 .Select()在那时候。

关于c# - 根据具有不同值的最近可用时间从 SQL 中检索项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61802268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com