我有兩個類,CheckboxItemsList
其中擴展通用列表和CheckboxItems
,其中包含類型CheckboxItem
類型的對象的列表。使用從LINQ通用列表派生的類
我想使用LINQ能夠根據CheckboxItems對象的屬性過濾CheckboxItemsList。雖然返回類型總是一個通用列表,但我希望它是一個CheckboxItemsList。
所以我想基本的問題是,linq可以返回一個相同類型的列表,它以開始?由於我無法將基類轉換爲派生類,除了迭代linq查詢的結果並逐行重建派生列表對象之外,是否有其他選擇?這並不是說這是世界末日,但我對linq來說相對陌生,並且想知道是否有更好的方法來做到這一點。
我想要什麼:
CheckboxItemsList newList = MyCheckboxItemsList.Where(item=>item.Changed);
(顯然是行不通的,因爲查詢將返回List<CheckboxItems>
,不CheckboxItemsList
)
的對象,一般爲:
public class CheckboxItemsList: List<CheckboxItems>
{
// does not add any fields, just access methods
}
public class CheckboxItems : IEnumerable<CheckboxItem>
{
public long PrimaryKey=0;
protected CheckboxItem[] InnerList;
public bool Changed
{
get {
return (InnerList.Any(item => item.Changed));
}
}
....
}
好的,第一種選擇是我在想什麼。似乎奇怪的是,linq沒有內置的方式來返回一個接受它返回的對象的其他類型的列表,例如, `newlist = MyCheckboxItemsList.Where(item => item.Changed).ToList(typeof(CheckboxItemsList))` – 2010-12-22 16:06:56
@jamietre:不,它並不奇怪。請記住,每項功能都需要設計,開發,測試和維護,並且與其相關的成本包括但不限於機會成本。 – jason 2010-12-22 16:22:29