C# 提取通用Linq查询
我想在我的windows窗体应用程序中使用Linq to SQL 本地数据库中的数据从Web服务获取或在本地创建 如果一个实体是从Web服务获取的,那么它已经外部化了 我经常需要使用下面的代码通过ExternalId获取对象: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
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。名称空间有问题:谢谢。