2010-01-26 70 views
2

我書面方式一個函數,參數和參數要求TEntity的類型。我希望能夠在運行時傳遞給它一個特定的類型,但我無法得到它的編譯:如何在C#中運行時設置類型TSomething?

public LoadOperation LoadQuery(EntityQuery<???> query) 
     { 
      LoadOperation loadOperation = DomainContext.Load(query,LoadBehavior.MergeIntoCurrent, false); 
      return loadOperation; 
     } 

這不會編譯看起來像這樣的代碼:

EntityQuery<Person> q = DomainContext.GetPerson(); 
LoadQuery(q); 

我已經嘗試了不同的事情做出這項工作,但無所適從。我需要做什麼?

回答

7

根據您的DomainContext.Load()函數看起來像什麼:

public LoadOperation LoadQuery<T>(EntityQuery<T> query) 
{ 
    LoadOperation loadOperation = DomainContext.Load(query,LoadBehavior.MergeIntoCurrent, false); 
    return loadOperation; 
} 

之後,還用它完全像之前一樣:

EntityQuery<Person> q = DomainContext.GetPerson(); 
LoadQuery(q); 

類型系統應該推斷你的意思是LoadQuery<Person>()該參數的函數版本。

不幸的是,我懷疑這也將意味着一些修改上述load()函數。

+0

負載的功能是WCF RIA服務的一部分,所以它不是我的。唯一的辦法做我想要做的是重寫該功能? – johnnywhoop 2010-01-27 14:23:14

+0

這個問題是該類型的第一個參數的功能:你可以通過任何通用'EntityQuery '呢?我猜不是。如果您可以修改該功能以便可以,那很好。既然你不行,你需要一種方法來將你的查詢變量按到這個函數可以接受的地方。 – 2010-01-27 14:47:38

+1

我還沒有得到它的工作,但你的答案解釋了很多正在發生的事情。我將它標記爲已回答,因爲它完全正確,問題出在Load()函數中,所以這是我需要關注的地方。由於Load()需要TEntity,所以我需要弄清楚如何修改它以使T或按摩我的查詢爲TEntity。 – johnnywhoop 2010-02-01 15:01:51