我正在尝试以通用方式过滤 LINQ-to-entities 查询,但我不断收到错误。这是一段代码:
private IQueryable<T> FilterDeletedEntities<T>(IQueryable<T> entities)
{
if (typeof(IDeletable).IsAssignableFrom(typeof(T)))
{
var deletableEntities = (IQueryable<IDeletable>)entities;
deletableEntities = deletableEntities.Where(entity => !entity.Deleted);
entities = (IQueryable<T>)deletableEntities;
}
return entities;
}
基本上,我试图过滤掉已删除的实体(即“已删除”字段为“true”),当且仅当该实体是 IDeletable(即它具有“已删除”字段)时。问题是我无法将 IQueryable 转换回 IQueryable。
有想法该怎么解决这个吗?在你问之前:是的,这个方法has是通用的。
提前致谢!
但你可以使用Cast<T>()
来转换它。
entities = deletableEntities.Cast<T>();
您也可以使用它来区分 IDeletable,例如,
private IEnumerable<T> FilterDeletedEntities<T>(IQueryable<T> entities)
{
if (typeof(IDeletable).IsAssignableFrom(typeof(T)))
{
return entities.ToList()
.Cast<IDeletable>()
.Where( e => !e.Deleted )
.Cast<T>();
}
return entities.ToList();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)