提取通用Linq查询

时间:2009-07-08 12:31:34

标签: c# .net linq

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

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

如果从Web服务获取实体,则它具有ExternalId设置

我经常需要使用如下代码来获取他们的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();
}

不幸的是这样的函数无法编译:

  1. 我不能将IExternalStorable添加到实体类,因为代码是从数据库生成的(我虽然使用了部分类但它似乎不起作用)
  2. C#抱怨TEntity不是引用类型我不确定通用的“where”约束应该是什么样的。
  3. 如何在泛型函数中使用linq?

2 个答案:

答案 0 :(得分:2)

考虑利用框架而不是自己动手:

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

答案 1 :(得分:1)

1:部分课程确实应该有效。你检查过命名空间是否相同?你遇到了什么错误?

2:应该是

where TEntity : class, IExternalStorable

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