這是我的MongoDB的文檔結構:MongoDB中的LINQ OfType()上的字段
{
string _id;
ObservableCollection<DataElement> PartData;
ObservableCollection<DataElement> SensorData;
...
other ObservableCollection<DataElement> fields
...
other types and fields
...
}
是否有可能檢索與類型ObservableCollection<DataElement>
場的串聯?使用LINQ我會做類似
var query = dbCollection
.AsQueryable()
.Select(x => new {
data = x
.OfType(typeof(ObservableCollection<DataElement>))
.SelectMany(x => x)
.ToList()
});
或可替代
data = x.Where(y => typeof(y) == typeof(ObservableCollection<DataElement>)
.SelectMany(x => x).ToList()
不幸的是.Where()
和.OfType()
不處理文檔,只有queryables /列表,所以是有其他方式來實現這一目標?文檔結構必須保持不變。
編輯: 後dnickless答案我有方法1B),這非常有效的讓字段你的路,他們都在收集試了一下。謝謝!
遺憾的是它不正是我一直在尋找,因爲我想是與特定類型一起放在一個列表,它會被OfType
或Where(typeof)
語句返回的所有領域。
例如data = [x.PartData , x.SensorData, ...]
與數據是ObsverableCollection<DataElement>[]
,以便我可以使用SelectMany()來最終獲得所有序列的連接。
對不起,問的問題unprecisely不包括做一個SelectMany()/Concat()
最後,我找到了一個解決方案這樣做的最後一步,但它似乎並不很優雅對我來說,因爲它需要爲每一個concat()
元素(和我有更多的人),它需要找到一個不存在的領域時,使一個新的集合:
query.Select(x => new
{
part = x.PartData ?? new ObservableCollection<DataElement>(),
sensor = x.SensorData ?? new ObservableCollection<DataElement>(),
}
)
.Select(x => new
{
dataElements = x.part.Concat(x.sensor)
}
).ToList()