我有客戶IEnumerable<Customer>
IEnumerable的<dynamic> LINQ表達式
現在我想有從該名單上disctinct公司名稱的動態列表?
我想我可以做類似
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
但今天學到,我不能...... 我怎麼能建立這樣的查詢?
我有客戶IEnumerable<Customer>
IEnumerable的<dynamic> LINQ表達式
現在我想有從該名單上disctinct公司名稱的動態列表?
我想我可以做類似
dynamic cur = (from c in result.Customers
select g.CompanyName).Distinct();
但今天學到,我不能...... 我怎麼能建立這樣的查詢?
只要Customer
類有一個成員CompanyName
,你絕對可以做到以下幾點:
var companies = (from c in result.Customers
select c.CompanyName).Distinct();
沒有優勢,使用的dynamic
關鍵字在var
這裏,比一個事實,即它會阻止其他編譯器出現錯誤。
不能這樣做:查詢表達式超過源類型'dynamic'或類型'dynamic'的連接序列是不允許的 – 2011-03-21 11:44:18
我認爲你需要提供更多的上下文。什麼是'結果'?什麼是'結果。客戶'? – jdmichal 2011-03-21 11:49:09
我的錯我回到了一個動態的,而不是IEnumerable
你在代碼中做什麼以及你在問題標題中問什麼是兩個不同的東西。
如果你想IEnumerable<dynamic>
你必須做到以下幾點:
IEnumerable<dynamic> cur = (from c in result.Customers
select g.CompanyName).Cast<dynamic>().Distinct();
from c in result.Customers select g.CompanyName
回報IEnumerable<string>
。
Cast<dynamic>()
返回IEnumerable<dynamic>
。
Distinct()
返回可枚舉的不同成員。
Distinct()
默認使用默認的相等比較器EqualityComparer<T>。這將檢查被枚舉的類型並試圖找出如何處理它(鏈接詳細描述了這一點)。
這一切都像廣告一樣工作,除非動態處理的類型不能由默認的相等比較器處理。在這種情況下,您必須使用採用自定義相等比較器的重寫。
很好的解釋。並感謝您的鏈接。 – 2011-06-27 15:33:19
你不能只使用var? – Manatherin 2011-03-21 11:23:44