2009-07-08 45 views
0

我想在我的Windows窗體應用程序中使用Linq to SQL。提取泛型Linq查詢

本地數據庫中的數據是從Web服務中獲取的或本地創建的。

如果一個實體是由它具有外部ID設置

我經常需要使用的代碼如下通過他們的外部ID獲取對象的Web服務牽強:

var user = (from u in db.User 
      where u.ExternalId == userExternalId 
      select u).First(); 

var location = (from l in db.Location 
      where l.ExternalId == locationExternalId 
      select l).First(); 

所以我雖然約將其更改爲一個通用的功能,如下一個:

internal TEntity FetchByExternalId<TEntity>(System.Data.Linq.Table<TEntity> table, 
               int externalId) 
where TEntity: IExternalStorable 
{ 
    return (from obj in table 
      where obj.ExternalId == externalId 
      select (TEntity)obj).First(); 
} 

遺憾的是這樣的功能並不編譯:

  1. 的代碼是從數據庫生成的我不能添加IExternalStorable到實體類(我雖然關於使用部分類,但它似乎並不工作)
  2. 它的C#抱怨TEntity ISN」 t引用類型我不確定泛型「where」約束應該是什麼樣子。

任何想法如何在泛型函數中使用linq?

回答

1

1:部分類真的應該工作。你有沒有檢查名稱空間是否一樣?你遇到了什麼錯誤?

2:應該是

where TEntity : class, IExternalStorable 

否則它可能是,比方說,另一個接口,它不能被實例化

+0

回覆:1.這是命名空間的問題:)謝謝。 – 2009-07-08 12:39:04

+0

已解決問題。謝謝! – 2009-07-08 12:41:43

2

考慮利用的框架,而不是滾動您自己:

Location location = db.Locations 
    .First(loc => loc.ExternalId == locationExternalId);