C# 提取通用Linq查询

C# 提取通用Linq查询,c#,.net,linq,C#,.net,Linq,我想在我的windows窗体应用程序中使用Linq to SQL 本地数据库中的数据从Web服务获取或在本地创建 如果一个实体是从Web服务获取的,那么它已经外部化了 我经常需要使用下面的代码通过ExternalId获取对象: var user = (from u in db.User where u.ExternalId == userExternalId select u).First(); var location = (from l in

我想在我的windows窗体应用程序中使用Linq to SQL

本地数据库中的数据从Web服务获取或在本地创建

如果一个实体是从Web服务获取的,那么它已经外部化了

我经常需要使用下面的代码通过ExternalId获取对象:

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();
}
不幸的是,这样的函数无法编译:

我无法将IExternalStorable添加到entity类中,因为代码是从数据库中生成的,我曾经考虑过如何使用分部类,但它似乎不起作用 它抱怨TEntity不是引用类型,我不确定泛型where约束应该是什么样子。
有没有关于如何在泛型函数中使用linq的想法?

1:部分类确实应该可以工作。您是否检查了名称空间是否相同?你犯了什么错误

2:应该是

where TEntity : class, IExternalStorable

如果不是这样,它可能是另一个接口,无法实例化:部分类确实应该可以工作。您是否检查了名称空间是否相同?你犯了什么错误

2:应该是

where TEntity : class, IExternalStorable

否则,它可能是另一个接口,无法实例化

请考虑利用该框架,而不是滚动您自己的框架:

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

考虑利用框架,而不是滚动您自己的框架:

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

回复:1。名称空间有问题:谢谢。Re:1。名称空间有问题:谢谢。