2013-02-21 21 views
1
protected void saveform<T>(System.Data.Linq.Table<T> table, bool submit) 
    where T : class 
{ 
    try 
    { 
     using (DataContext dc = new DataContext()) 
     { 
      var form = (from f in table 
         join r in dc.tbRecords on f.recordId equals r.recordId 
         where r.pID == pId 
         select new {f, r}).SingleOrDefault(); 
     ... 

但我得到這個錯誤消息時編譯:如何將System.Data.Linq.Table <TEntity>包裝爲泛型方法?

「T」不包含關於「的recordId」的定義和沒有擴展 方法「的recordId」接受類型的第一個參數「T」能被 (是否缺少using指令或程序集引用?)

我如何處理呢? 謝謝。

+1

T代表行類型,因此它限制你的類型已經recordId所公共財產 – sll 2013-02-21 16:30:22

+0

你確定你需要的任何你所要完成的仿製藥? – Arran 2013-02-21 16:31:30

+0

是的,如果我可以去saveForm()的通用類型,我不必爲每個表單都有這個方法。 – etlds 2013-02-21 16:34:15

回答

2

你怎麼知道T有'recordId'屬性?它的唯一限制是對象...

一個可能的解決方案是包裝你的實體的接口:

public interface IRecord 
{ 
    public int recordId { get; } 
} 

您可以使用部分類,讓您的實體實現此接口。然後,將您的方法的泛型類型約束到該接口,例如,

protected void saveform<T>(System.Data.Linq.Table<T> table, bool submit) where T : IRecord