C# 方法采用类型来执行nhibernate查询?

C# 方法采用类型来执行nhibernate查询?,c#,.net,generics,C#,.net,Generics,我正在尝试创建一个方法,以使用不同的类作为参数执行nhiberate查询,如: ... deleteFirst<ClientInfo>(); deleteFirst<SellerInfo>(); deleteFirst<AdministratorInfo>(); ... public void deleteFirst<T>() where T: ClientInfo { var clients = Session.Q

我正在尝试创建一个方法,以使用不同的类作为参数执行nhiberate查询,如:

 ...
 deleteFirst<ClientInfo>();
 deleteFirst<SellerInfo>();
 deleteFirst<AdministratorInfo>();
 ...

 public void deleteFirst<T>() where T: ClientInfo
 {
        var clients = Session.QueryOver<T>().Where(x => x.Id != 0).AndRestrictionOn(x => x.Entity).IsNotNull.List();
        Session.Delete(clients[0]);
 }
。。。
删除第一个();
删除第一个();
删除第一个();
...
public void deleteFirst(),其中T:ClientInfo
{
var clients=Session.QueryOver();
删除(客户端[0]);
}
但是,在这里它只适用于ClientInfo类。 我所有的课程都扩展了BaseInfo类

另外,基类没有这个实体参数,所以如果我使用public void deleteFirst(),其中t:BaseInfo


(x=>x.Entity)给我一个错误(无法解析符号实体)

您可以尝试以下操作

public void deleteFirst<T, U>(Func<T, U> entityCondition) where T: BaseInfo
{
    var toDelete = Session.QueryOver<T>().Where(x => x.Id != 0)
        .AndRestrictionOn(entityCondition).IsNotNull.List();
    Session.Delete(toDelete[0]);
}
public void deleteFirst(Func entityCondition),其中T:BaseInfo
{
var toDelete=Session.QueryOver()。其中(x=>x.Id!=0)
.AndRestrictionOn(entityCondition).IsNotNull.List();
Session.Delete(toDelete[0]);
}
召唤

deleteFirst<ClientInfo, Entity>(x => x.Entity);
deleteFirst(x=>x.Entity);

尽管如果toDelete不返回任何内容,这仍然会失败,但您需要创建一个基类并从中扩展“info”类
public void deleteFirst(),其中T:BaseInfo
。您的类将如下所示:
公共类ClientInfo:BaseInfo
。如果我们添加了一个check:public void deleteFirst(Func entityCondition),那么该方法应该是什么样的呢(x=>x.Id!=0).List();if(toDelete[0].Entity.parameter1!=null)//如何在此处添加此实体条件{Session.Delete((object)toDelete[0]);}