Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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
C# 嵌套数组的Lambda_C#_.net_Arrays_.net 4.0_Lambda - Fatal编程技术网

C# 嵌套数组的Lambda

C# 嵌套数组的Lambda,c#,.net,arrays,.net-4.0,lambda,C#,.net,Arrays,.net 4.0,Lambda,我有一个自定义对象列表: List<SomeObject> someobjects = getAllSomeObjects(); List<SomeObject> someobjectsfiltered = new List<SomeObject>(); class SomeObject { List <AnotherList> } class AnotherList { public string Name{get;set;} p

我有一个自定义对象列表:

List<SomeObject> someobjects = getAllSomeObjects();
List<SomeObject> someobjectsfiltered = new List<SomeObject>();

class SomeObject
{
  List <AnotherList>
}

class AnotherList
{
  public string Name{get;set;}
  public Categories category {get;set;}
}
但是我得到了

无法隐式转换类型 IEnumerable到Generic.List

错误

你知道怎么解决这个问题吗


非常感谢。

您需要在末尾抛出一个
ToList()
,或者将结果的类型更改为
IEnumerable
,因为正如错误所说,您无法将
IEnumerable
分配给
列表
类型的变量

根据评论进行编辑

如果您想要的是
SomeObjects
,其中包含与类别匹配的项的列表,则可以使用

someobjectsfiltered = someobjects.Where( s => s.AnotherList.Any( a => a.category == SomeCategory ))
                                 .ToList();

SelectMany
返回
IEnumerable
-只需在末尾添加对
ToList()
的调用,即可将其转换为
列表

someobjectsfiltered = someobjects.SelectMany(s => s.AnotherList.FindAll(a => a.category == SomeCategory)).ToList();

@tvanfosson@Maya不确定“Any”在这里如何工作,因为它将始终返回true,从而导致整个另一个列表(内部列表)被选中,如果该“类别”类型在内部列表中存在一次,那么它的所有内容都将被选中,包括那些不需要的类别类型。

@adam rackis非常感谢你的工作很好,出于兴趣,我可以在这里使用FindAll().FindAll()而不是SelectMany().FindAll()?@Maya-我不这么认为。SelectMany执行投影和连接,而FindAll执行过滤器。这就像试图用
where
子句替换
select
一样。抱歉@tvanfosson,我已经测试了ToList()解决方案,如果筛选的某个对象是另一个列表的类型,它工作得很好,但我在上面的原始代码中对其进行了测试,其中someobjectsfiltered是SomeObject的列表,并且给出了一个错误,即无法将列表转换为列表。在这里发表评论之前,我可能应该对上面的代码进行测试。@Maya-我误解了您的意图。我以为你在尝试获取另一个具有匹配类别的列表对象。您正在尝试获取其列表包含具有匹配类别的项的SomeObjects吗?那就不同了。我会在我的回答中加上这个。如果它真的是前者,那么过滤列表的类型必须是
list
(顺便说一句,这是一个误导性极强的类名)。是的,这正是我想要做的(你最初的回答帮助我解决了另一个问题)。现在一切都很好,我为示例中的误导性名称道歉,在我发布之前,我没有很快很好地掩盖实际的敏感名称,再次非常感谢:)这是真的,但我在这里得到了回答
someobjectsfiltered = someobjects.Where( s => s.AnotherList.Any( a => a.category == SomeCategory ))
                                 .ToList();
someobjectsfiltered = someobjects.SelectMany(s => s.AnotherList.FindAll(a => a.category == SomeCategory)).ToList();