2012-05-21 51 views
2

我有一個基礎機構A,和派生實體:AA,AB,AC,AD的EntityFramework的GroupBy實體類型

context.A.GroupBy(x => x.GetType()).Select(x => new { type=x.GetType(), count = x.Count() }); 

當然,我得到錯誤:

LINQ to Entities does not recognize the method 'System.Type GetType()' method, and this method cannot be translated into a store expression.

我怎麼能集團派生實體按類型?

+0

你有沒有找到解決這個問題的方法?我面對完全相同的問題。 –

+0

您是否找到了解決方案? – Karan

回答

0

如果類型是預定義的,你可以使用Enumerable.OfType Method

var acs = context.A.OfType<AC>().Count(); 
+0

謝謝,但我用GroupBy()做到了。類型是通用的。 –

+0

你的意思是類型是通用的? – archil

+2

我有一個函數和函數,第一個參數是基類的類型。在這個問題中,基本實體是A,函數返回AA,AB,AC ...和記錄計數。但是當基本實體是X時,函數必須返回XY,XZ,XX並記錄計數。有解釋嗎? –

0

您需要調用的GroupBy之前,滋潤你的實體記憶 - 這樣的x.GetType()調用將通過LINQ來處理對象和而不是LINQ to Entities。試着這樣做:

context.A.ToList().GroupBy(x => x.GetType()).Select(x => new { type=x.Key, count = x.Count() }); 

我改變了它,所以你叫你的選擇x.Key而不是x.GetType(),否則你將得到的分組,這將是這樣的IGrouping <的類型... >

+2

是的,這是工程,但我可能有百萬條記錄。在LINQ to Entities中以某種方式做到這一點? –

+0

你不能,因爲它說.. LINQ to Entities不支持.GetType(),你會如何將GetType()轉換爲sql? SQL不支持繼承,它是由entitiy-framework在代碼中實現的功能。 –

+0

你可以過濾判別? – Karan