Linq to sql LinqToSQL-在运行时强制转换IQueryable对象?

Linq to sql LinqToSQL-在运行时强制转换IQueryable对象?,linq-to-sql,Linq To Sql,鉴于此: var query = context.GetTable<T>(); var query=context.GetTable(); 其中“T”是传递到方法中的泛型实体 我想这样做: if(typeof(TEntity) is IEntitySoftDeletable) query = query.Cast<IEntitySoftDeletable>.Where(ent => !ent.IsDeleted); } if(typeof(tenty)是I

鉴于此:

var query = context.GetTable<T>();
var query=context.GetTable();
其中“T”是传递到方法中的泛型实体

我想这样做:

if(typeof(TEntity) is IEntitySoftDeletable)
  query = query.Cast<IEntitySoftDeletable>.Where(ent => !ent.IsDeleted);
}
if(typeof(tenty)是IEntitySoftDeletable)
query=query.Cast.Where(ent=>!ent.IsDeleted);
}
这可能吗

现在它告诉我我不能这样投


我意识到我可以强制参数“T”在类或方法级别成为一个EntitySoftdeletable,但我试图避免这种情况,并从相同的方法中提供更多的灵活性。

您可以使用

obj.GetType().GetInterface("IEntitySoftDelete") == null

我想这应该能满足你的需要。。。只需确保添加一个using for System.Reflection。

不确定我是否完全理解您的要求,但这是否可行

query.OfType<IEntitySoftDeletable>().Where(ent => !ent.IsDeleted); //OfType will only give the ones that are IEntitySoftDelteable
query.OfType().Where(ent=>!ent.IsDeleted)//OfType将只提供可进行EntitySoftDeletable的

不实现EntitySoftDeletable吗?不总是…T可以是任意数量的类型,其中一些实现了EntitySoftDeletable。如果T是一个EntitySoftdeletable,我想在queryable中附加一个谓词。我试图避免的是这种分离行为需要重载。我在确定obj是否是EntitySoftDeletable时没有遇到问题,我在将IQueryable转换为IQueryable时遇到了问题。我唯一能做的就是在类或方法级别将“T”约束为一个EntitySoftdeletable。同样的问题。它说它不能将“t”转换为“IEntitySoftDeletable”。我有一个接受“T”的类,其中T没有contstraint。因此,当我得到一个类型为“T”的查询表时,它不是一个IEntityQueryable,但它“可能”是。我想做的是在运行时检查它是否是,如果是,检查IsDeleted的值。您的方法允许我检查IsDeleted,但queryable不能从类型“t”转换为“EntitySoftDeletable”。我想我完蛋了,基本上必须限制超负荷。哦,等等,对不起,我脑子放屁了。你的方法会奏效的。我就是不能将它返回到同一个查询变量“duh”中。我必须声明一个新的查询。