C# Linq到NHibernate存储库实施详细信息

C# Linq到NHibernate存储库实施详细信息,c#,.net,linq,nhibernate,linq-to-nhibernate,C#,.net,Linq,Nhibernate,Linq To Nhibernate,我想为我的MyTypeRepository提供以下API: var myChosenInstance = _myRepository.FindOne(x => x.MyProperty == "MyValue"); ..以及用于在存储库中构造linq查询的lambda,然后由linq用于NHibernate 这可能吗?我的repository FindOne方法是什么样子的?类似这样的东西 var f = new Func<MyType, bool>(x => x.My

我想为我的
MyTypeRepository
提供以下API:

var myChosenInstance = _myRepository.FindOne(x => x.MyProperty == "MyValue");
..以及用于在存储库中构造linq查询的lambda,然后由linq用于NHibernate

这可能吗?我的repository FindOne方法是什么样子的?

类似这样的东西

var f = new Func<MyType, bool>(x => x.MyProperty == "MyValue");
var query = from t in session.Linq<MyType>() 
            where f.Invoke(t) 
            select new { Id = c.Id, Name = c.Name };
//or...
var query = from c in collection 
            .Where(f) 
            select new { Id = c.Id, Name = c.Name };
var results = query.Single();
var f=newfunc(x=>x.MyProperty==“MyValue”);
var query=来自会话中的t.Linq()
其中f.Invoke(t)
选择新的{Id=c.Id,Name=c.Name};
//或者。。。
var query=来自集合中的c
.其中(f)
选择新的{Id=c.Id,Name=c.Name};
var results=query.Single();
公共实体类型FindOne(表达式谓词)
{
返回session.Linq().FirstOrDefault(谓词);
}
我想

  • 您的存储库类有一个名为
    session
    变量的
    ISession
  • Linq To NHibernate有一个
    FirstOrDefault()
    方法的工作实现(因为我还没有测试它来确认)
  • 如果您的存储库类有一个类型参数
    repository
    ,那么您可以从方法中省略该类型参数。

    作为替代,是一个存储库接口和实现,它公开了泛型
    IQueryable
    ICollection
    IDictionary
    接口

    使用它时,您只需使用LINQ扩展方法进行查询,即
    repository.Single(lambda)
    ,等等

    public EntityType FindOne<EntityType>(Expression<Func<EntityType,bool>> predicate)
    {
        return session.Linq<EntityType>().FirstOrDefault(predicate);
    }