gpt4 book ai didi

linq - 使用 LINQ 从嵌套集合中选择 Single

转载 作者:行者123 更新时间:2023-12-04 05:41:33 24 4
gpt4 key购买 nike

我有两个类(class) - MyBaseClass BaseClassContainer - 声明如下:

public class MyBaseClass
{
private Guid id;
public Guid ID
{
if (id == Guid.Empty)
{
id = Guid.NewGuid();
}
return id;
}
//...Other Properties omitted for brevity
}


public class BaseClassContainer : INotifyPropertyChanged
{
private ObservableCollection<MyBaseClass> baseClasses;
public ObservableCollection<MyBaseClass> BaseClasses
{
//...Omitted for brevity...
}
}

然后在我的代码中,我有一个 BaseClassContainer (BaseClassContainerCollection) 类型的 ObservableCollection。我想弄清楚的是如何使用 LINQ 从 ObservableCollection 中选择一个 BaseClassContainer,其中一个 MyBaseClass.ID 与特定的 Guid 匹配。我使用 Single() 方法的原因是因为我知道它们都是独一无二的。

我已经尝试了以下但它不起作用:
var result = BaseClassContainerCollection.Single(container => container.BaseClasses.Single(baseClass => baseClass.ID == specificGuid));

我收到一条错误消息:无法将类型“MyBaseClass”隐式转换为“bool”。我错过了什么?

最佳答案

让我们分解您的查询:

BaseClassContainerCollection.Single(yourPredicate);
Single ,正如这里使用的那样,基本上是说“在这个谓词上过滤 BaseClassContainerCollection”(一个“过滤器”函数,它评估为真或假,以确定是否将其包含在结果中)。不是返回 true/false 的函数,而是说您希望它评估为 MyBaseClass,这是没有意义的。您内心的呼唤 Single有道理,因为 x => x.Id == guid是一个函数,它返回 true/false 并仅过滤那些符合条件的元素(然后声明您知道结果中只会有其中之一,否则会引发异常)。

您要做的是 Select来自内部查询的单个 MyBaseClass 结果,然后对结果调用 Single(不带谓词),因为您知道结果应该只返回一项。我相信你正在寻找:
BaseClassContainerCollection.Select(container => container.BaseClasses.Single(baseClass => baseClass.ID == specificGuid)).Single();

关于linq - 使用 LINQ 从嵌套集合中选择 Single,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217965/

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