使用 NHibernate LINQ 查找最后保存的 ID

finding last saved id using NHibernate LINQ

目前我正在使用以下代码

 var lastId = DataRepository.All().ToList().LastOrDefault().Id;

为了找到最后插入的行Id

如何在不投影到 ToList() 的情况下重构上述代码?

DataRepository.All() returns IQuerable<T>

真的就像 评论一样简单。

如果您的 DataRepository.All() returns IQuerable<T> - 所有这些类型的查询将导致一个简单的 SQL 语句仅返回最后一个 编号:

// query
IQueryable<T> query = DataRepository.All();

// just MAX
var maxIdA = query
   .Max(x => x.Id);

// also this kind of construct with Take() and SingleOrDefault()
// will be effective (not loading complete list from DB to app)
// and could be used for more complex queries with unique result
var maxIdB = query
      .OrderByDescending(x => x.Id)
      .Select(x => x.Id)
      .Take(1)
      .SingleOrDefault();