我们有几种不同的数据类型,它们都共享一个特定的基类。我们还有一个List<BaseClass>
包含这些子类对象的随机集合,没有特定的顺序。
使用 Linq/Lambda 表达式,我们尝试提取每个单独的子类类型,按该特定子类的属性排序,然后将其存储在强类型值中List<SubclassType>
这是我目前正在做的事情,但不是 LINQ 专家,我觉得有一种更简单的方法可以实现这一目标。(我感觉我的 Where 和 Select 在某种程度上是多余的,并且会导致对集合的过度传递,但我可能是错的。)
class baseItem{}
class subItemX : baseItem
{
public int XSortValue{ get; set; }
}
class subItemY : baseItem
{
public int YSortValue{ get; set; }
}
List<MyBaseClass> allItems = GetAllItems(); // Random collection of subclass objects.
// Is there an easier/less verbose way to achieve these two?
List<SubItemX> xItemsOnly = allItems
.Where(baseItem => baseItem is SubItemX)
.Select(baseItem => baseItem as SubItemX)
.OrderBy(subItemX => subItemX.XSortValue)
.ToList();
List<SubItemY> yItemsOnly = allItems
.Where(baseItem => baseItem is SubItemY)
.Select(baseItem => baseItem as SubItemY)
.OrderBy(subItemY => subItemY.YSortValue)
.ToList();
然而,我有一种感觉,我让这些变得比他们需要的复杂得多。这是最有效的方法吗?