Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用LINQ从嵌套集合中选择单个集合_Linq_Collections_Nested_Linq To Objects_Observablecollection - Fatal编程技术网

使用LINQ从嵌套集合中选择单个集合

使用LINQ从嵌套集合中选择单个集合,linq,collections,nested,linq-to-objects,observablecollection,Linq,Collections,Nested,Linq To Objects,Observablecollection,我有两个类-MyBaseClass和BaseClassContainer,声明如下: public class MyBaseClass { private Guid id; public Guid ID { if (id == Guid.Empty) { id = Guid.NewGuid(); } return id; } //...Other Properties

我有两个类-MyBaseClassBaseClassContainer,声明如下:

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


我得到一个错误:无法隐式地将类型“MyBaseClass”转换为“bool”。我遗漏了什么?

让我们来分析一下你的问题:

BaseClassContainerCollection.Single(yourPredicate);
这里使用的
Single
,基本上表示“filter BaseClasseContainerCollection on this谓词”(一个“filter”函数,其计算结果为true或false,以确定是否将其包含在结果中)。不是返回true/false的函数,而是希望它计算为MyBaseClass,这是没有意义的。您对
Single
的内部调用是有意义的,因为
x=>x.Id==guid
是一个函数,它只返回true/false并筛选满足条件的元素(然后声明您知道结果中只有一个元素,否则会引发异常)

您要做的是从内部查询中选择单个MyBaseClass结果,然后对结果调用single(不带谓词),因为您知道结果应该只返回一个项。我相信您正在寻找:

BaseClassContainerCollection.Select(container => container.BaseClasses.Single(baseClass => baseClass.ID == specificGuid)).Single();

我想这正是我想要的。现在我要弄清楚为什么序列中没有匹配的元素。我在那一行上放置了一个断点,观察到它找到了ID与特定Guid匹配的MyBaseClass,但它仍然告诉我没有匹配项。我认为这可能是一个有约束力的问题。然而,就目前而言,这是答案。
BaseClassContainerCollection.Single(yourPredicate);
BaseClassContainerCollection.Select(container => container.BaseClasses.Single(baseClass => baseClass.ID == specificGuid)).Single();