我需要施放:IQueryable<PARENT>
到IQueryable<Child>
。IQueryable親子
IQueryable<PARENT> query = GetParents();
IQueryable<CHILD> result = query.Select(t => t.Children);
這不起作用,無法將EntitySet轉換爲IQueryable。由於
我需要施放:IQueryable<PARENT>
到IQueryable<Child>
。IQueryable親子
IQueryable<PARENT> query = GetParents();
IQueryable<CHILD> result = query.Select(t => t.Children);
這不起作用,無法將EntitySet轉換爲IQueryable。由於
用途:
IQueryable<CHILD> result = query.SelectMany(t => t.Children);
查詢返回父的所有cild項目,童車被多個家長引用將返回多次。
要獲得不同的行使用 - 你將不得不實現一個實現了IComparer,雖然,做一個自定義過濾。 Distinct()
將查看實例而不是值。
IQueryable<CHILD> result = query.SelectMany(t => t.Children)
.Distict(new Comparer<CHILD>());
Distinct()
刪除查詢中的重複項。
Aternatively你可以用分組創建分組爲孩子:
IEnumerable<CHILD> result = query.SelectMany(t => t.Children)
.GroupBy(x => new CHILD {
id = x.id
// add other properties here
})
.Select(g => g.Key);
相反new CHILD { }
的,你也可以使用new { }
創建一個匿名的結果,在這種情況下,你應該var
取代IEnumerable<CHILD>
。
要執行Linq中的一個類型轉換,你可以使用 - 雖然我認爲這不會在你的情況下工作:
someQuery.OfType<TypeToCastTo>().Cast<TypeToCastTo>();
OfType<T>()
過濾項目,以便Cast<T>()
可以進行類型轉換。
謝謝你的回覆。 – Victor 2010-03-04 19:06:24
這意味着您可以將'Parent'強制轉換爲'Child',即該Parent從子代繼承,或者兩者都實現相同的接口,但與IQueryable相矛盾。 –
AxelEckenberger
2010-03-03 23:18:05
是的,他們有一個數據庫中的實體集關聯,所以孩子從父母繼承。您的方法有效,但出於某種原因會創建一些重複項。 – Victor 2010-03-03 23:22:31
修改我的答案。但是,他所描述的關係是1:n的關係。即父母有多個孩子,每個孩子有一個父母。繼承是不同的!它描述了一種類型關係船,例如,黃瓜是蔬菜類型。當你得到重複的時候,它意味着(如果是1:n)關係,你的子表中有多個具有相同值的條目。 – AxelEckenberger 2010-03-04 10:37:56