无法找出具有多个和包含的泛型对象的C#泛型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了无法找出具有多个和包含的泛型对象的C#泛型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1716字,纯文字阅读大概需要3分钟。
内容图文
![无法找出具有多个和包含的泛型对象的C#泛型](/upload/InfoBanner/zyjiaocheng/660/1c0f89164a7f4eab925d47bbec02880f.jpg)
我正在尝试使用模板模式和C#泛型来编写实用程序,该实用程序将为任何DbContext中的任何DbSet列出数据库中的实体.我想我需要三个泛型:
public class lister<TDbSet, TContext, TEntity>
where TDbSet : DbSet<IPEntity>
where TContext : DbContext
were TEntity : IPEntity
(IPEntity是我们所有实体类的抽象基类.)除了尝试编写LINQ表达式以获取结果集之外,其他所有事情似乎都很高兴.由于“ TDbSwt”实际上是TContext的成员,因此我无法弄清LINQ是否可以让您执行以下操作:
from x in TContext.TDbSet select x
无论我是否在TDbSet之前加上TContext,它当然都不喜欢THAT行.
有人知道我该如何设置吗?现在,我有针对实体和LINQ的单独的类(非常小,但每个实体仍然一个),但是随着我们从数十个实体发展到数百个实体甚至数千个实体,我想找到一个更紧凑,更优雅的解决方案.
谢谢.
解决方法:
from x in TContext.TDbSet select x
这有两个原因不起作用:
> TContext是一种类型,但是您要对其调用的成员不是静态的,因此您需要一个TContext实例
> TDbSet也是一种类型.仅仅因为TContext碰巧具有与TDbSet相同的名称(甚至相同的类型)的成员,并不意味着您可以开始使用TDbSet作为成员名称而不是类型.
您想要的可能是这样的:
public class lister<TEntity>
where TEntity : IPEntity
{
private DbContext _context;
private DbSet<TEntity> Set
{
get { return _context.Set<TEntity>(); }
}
public lister(DbContext context)
{
_context = context;
}
}
现在在该类中,您可以编写:
from x in Set select x
它会按预期工作.
或者,您可能希望列表器本身实例化上下文.这不太可能是您应该做的,但是我不能确定没有看到您的总体设计.在这种情况下,您需要:
public class lister<TEntity, TContext>
where TEntity : IPEntity
where TContext : DbContext, new()
{
private TContext _context;
private DbSet<TEntity> Set
{
get { return _context.Set<TEntity>(); }
}
public lister()
{
_context = new TContext();
}
}
可能会有一些变化.例如,您可能想从其他方法而不是构造函数传入或实例化上下文.
内容总结
以上是互联网集市为您收集整理的无法找出具有多个和包含的泛型对象的C#泛型全部内容,希望文章能够帮你解决无法找出具有多个和包含的泛型对象的C#泛型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。