2010-10-21 102 views
1

我想創建一個可接受T的通用類。通用類約束:2種類型

T是來自實體框架的對象,表示表或該表的視圖。

兩者的屬性都是相同的。

我想創建一個泛型類,它將接受表或視圖,並基於屬性構造一個linq查詢。

,所以我需要做的是這樣.. 類Foo其中T:myTable的或T:MyView的

這樣,以後我可以使用強類型的特性來構建我的斷言。

我怎麼能達到這樣的東西?

我建我的查詢方式看起來是這樣的:

 if (critera.IsTradeDate) 
      predicate = PredicateUtility.And(predicate, t => t.DateTrade >= critera.FromDate); 

的t是需要堅強的類型和屬性使用將會對錶和視圖一樣。所以在這種情況下,t應該代表我的表或我的觀點,重新使用代碼,但仍然利用實體框架..

回答

2

創建一個接口ITableOrView(或更好的名字)。將接口應用於表或視圖的實體的兩個部分類。

where T : ITableOrView

創建泛型類現在你可以使用的接口類型。

但是您不能在Entity Framework查詢中的很多地方使用接口,因此您實際上需要將該工作委託給「T」類本身。

+0

是的,這是一個好主意。但是我的表和視圖對象是由EF生成的,所以我沒有直接控制它們。我可以添加部分類來實現這個接口,但我想問一下是否有其他的方法來實現它(也許使用約束但不一定) – 2010-10-21 21:16:50