2009-07-08 46 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);