That should work.
return _schema.GetAll<Node>() .Where(node => node.Type == NodeType.Unmanaged) .Cast<Shape>() .ToList()
If your method had an IEnumerable<Shape> return type, you would not need to call ToList() .
You can also write it like this (with IEnumerable<Shape> return type):
return from node in _schema.GetAll<Node>() where node.Type == NodeType.Unmanaged select node as Shape;
source share