如何从lambda表达式结果转换为通用列表

时间:2012-10-12 08:27:28

标签: linq

我有类似下面的课程结构。

ObservableCollection<Group> deviceCollection = new ObservableCollection<Group>();
public class Group 
{ 
    public string Name { get; set; }       
    public List<TargetSelectionStructure> TargetCollection { get; set; }
}
public class TargetSelectionStructure
{
    public string ItemId { get; set; }
    public string Name { get; set; }
    public bool IsGroup { get; set; }
}

来自可观察的集合对象deviceCollection。我需要将与IsGroup属性匹配的集合作为false。所以我写了像

var currentStruct = deviceCollection.Where(d => d.TargetCollection.Any(t => t.IsGroup == false));

现在,currentStruct应该包含基本上List<TargetSelectionStructure>的集合。我无法将currentStruct转换为List<TargetSelectionStructure>的类型 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您无法强制转换,因为currentStructIEnumerable<Group>

我认为你的查询需要看起来像这样:

var currentStruct = deviceCollection.SelectMany(x => x.TargetCollection)
                                    .Where(x => !x.IsGroup).ToList();

这会返回TargetSelectionStructure的所有GroupIsGroup == false个实例。

你的问题并不完全清楚。您可以通过第二种方式解释您的问题:如果至少其中一个实例TargetSelectionStructure,您希望拥有GroupIsGroup == false个实例。
要实现此目的,您将使用此查询:

var currentStruct = deviceCollection.Where(x => x.TargetCollection
                                                 .Any(y => !y.IsGroup))
                                    .SelectMany(x => x.TargetCollection)
                                    .ToList();