代码之家  ›  专栏  ›  技术社区  ›  Ben Aston

linq to nhibernate存储库实现详细信息

  •  2
  • Ben Aston  · 技术社区  · 15 年前

    我想为我的 MyTypeRepository :

    var myChosenInstance = _myRepository.FindOne(x => x.MyProperty == "MyValue");
    

    …对于用于在存储库中构造LINQ查询的lambda,然后由LINQ to nhibernate使用。

    这有可能吗?我的存储库findone方法是什么样子的?

    3 回复  |  直到 15 年前
        1
  •  7
  •   Jay    15 年前
    public EntityType FindOne<EntityType>(Expression<Func<EntityType,bool>> predicate)
    {
        return session.Linq<EntityType>().FirstOrDefault(predicate);
    }
    

    我假设

    1. 您的知识库类具有 ISession 变量称为 session
    2. linq to nhibernate有一个 FirstOrDefault() 方法(因为我还没有测试确认)

    如果存储库类具有类型参数 Repository<EntityType> ,然后可以从方法中省略类型参数。

        2
  •  0
  •   Ben Aston    15 年前

    像这样?

    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();
    
        3
  •  0
  •   Diego Mijelshon    15 年前

    作为替代方案, here 是一个公开通用的存储库接口和实现 IQueryable , ICollection IDictionary 接口。

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