gpt4 book ai didi

c# - 如何使用 LINQ 从通用列表中获取下一个合适的值?

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:58 25 4
gpt4 key购买 nike

我有一个类:

public class CounselPoints
{
public int CounselNum { get; set; }
public String CounselPoint { get; set; }
public bool BR { get; set; }
public bool ICRVBS { get; set; }
}

...以及该类的通用列表:

List<CounselPoints> counselPoints = AYttFMConstsAndUtils.DeserializeCounselPointsFile();

我想从该通用列表中检索下一个合适的 CounselPoint,其逻辑可以用 SQL 表达,如下所示:

SELECT TOP 1 CounselNumber
FROM COUNSELPOINTSLU
WHERE BR IS TRUE
AND CounselNumber > @LastCounselPoint;

我调用此方法来尝试获取该值,并像这样挥舞着它:

public static int GetNextBibleReadingCounselPoint(int LastCounselPoint)
{
List<CounselPoints> counselPoints = AYttFMConstsAndUtils.DeserializeCounselPointsFile();
return counselPoints.FirstOrDefault(i => i.CounselNum).Where(j => j.BR).Where(k => k.CounselNum > LastCounselPoint);
}

在“英语”中,我试图说,“给我第一个 CounselNum,它比传入的 arg (LastCounselPoint) 的数字更大,并且 BR 为真””

例如,如果我传入 17,并且 CounselNum val 为 18 的 counsePoint“记录”也将 BR 设置为 true,它应该返回 18。很简单,不是吗?

但我的尝试显然很可怕,或者充其量是笨拙的,甚至没有编译;我得到:

错误 CS0029 无法将类型“int”隐式转换为“bool”

...和:

错误 CS1662 无法将 lambda 表达式转换为预期的委托(delegate)类型,因为 block 中的某些返回类型无法隐式转换为委托(delegate)返回类型

我不知道为什么它认为我正在尝试转换为 bool,我绝对不会理解第二个错误。

如果我把代码改成这样:

return counselPoints.FirstOrDefault(i => i.CounselNum > LastCounselPoint).Where(j => j.BR).Select(k => k.CounselNum );

我得到:

错误 CS1061“CounselPoints”不包含“Where”的定义,并且找不到接受“CounselPoints”类型的第一个参数的扩展方法“Where”(您是否缺少 using 指令或程序集引用?)

...这也只会导致我告诉编译器,“除了九点,其他人都倒下了;把他们放在另一条胡同上。

解开这个难题的关键是什么?

最佳答案

使用查询时,首先需要使用过滤条件,然后才调用FirstOrDefault:

return counselPoints
.Where(j => j.BR)
.Where(k => k.CounselNum > LastCounselPoint)
.Select(i => i.CounselNum)
.FirstOrDefault();

有两种类型的 LINQ 查询运算符 - immediate and deferred . Where 是延迟运算符的例子,FirstOrDefault 是立即运算符。

在您的代码中,您在无序列表上使用了 FirstOrDefault,因此您立即过滤了初始列表。

在我提供的示例代码中,我首先使用延迟运算符来定义过滤器,然后才使用立即函数来检索结果。

关于c# - 如何使用 LINQ 从通用列表中获取下一个合适的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473582/

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