我们有几种不同的数据类型,它们都共享一个特定的基类。我们还有一个List<BaseClass>
,其中包含这些子类对象的随机集合,没有特定的顺序。如何使用LINQ将基类对象集合转换为其各自子类的过滤列表?
使用LINQ/Lambda表达式,我们正在试图提取每个单独的子类型,由具体的子类的属性排序,然后将其存储在List<SubclassType>
这里一个强类型的值是什么我目前在做,但不是LINQ专家,我有一种感觉,有一种更简单的方法来实现这一点。 (我越来越觉得我在哪里,选择在某种程度上冗余,并导致更比需要经过收集,但我可能是错的。)
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();
不过,我有我做了一个感觉这些比他们需要的要复杂得多。这是最有效的方法吗?
谢谢,@Anthony!我感觉这很容易。但我不能投票给你的答案,因为它不是'答案'! – MarqueIV
啊!你现在做到了。您的评论已消失,并有新的答案!不会让我接受它(必须等待10分钟),但你得到了答案。 :) – MarqueIV