如果没有 LoadSelect,我如何 return asQueryable?
How can I return asQueryable without LoadSelect?
我正在使用最新的 ServiceStack OrmLite(当前为 v4.5.6)和 C#
我需要 return asQueryable 来自一个方法,例如;
using (IDbConnection databaseConnection = _databaseFactory.Open())
{
SqlExpression<T> sqlExpression = databaseConnection.From<T>();
IQueryable<T> asQueryable = databaseConnection.LoadSelect(sqlExpression, include)
.AsQueryable();
return asQueryable;
}
但是如您所见,加载Select 已经转到 sql 服务器,例如;
Select 来自 Table
的 PARAMSetc
所以我只需要 IQueryable 而无需转到 sql 服务器。我是用 Entity Framework 做的,这是代码;
public IQueryable<T> GetAll(Expression<Func<T, bool>> predicate)
{
return _dbSet.Where(predicate);
}
是的,我正在编写一种通用存储库包装器,我知道存储库模式不应该 return IQueryable,因为有人使用此方法可能会导致性能错误等。这不在我的主题范围内,对吧现在。
我如何 return IQueryable with OrmLite?
I saw a post like this;
here
首先,OrmLite 中没有 IQueryable 或 Linq,它几乎只使用 SQL 或过滤器。
"Each" 中的方法 return 返回延迟计算的列表。
Generally you just query by passing in a "where sql", "anon types" or
full sql, eg:
var results = dbCmd.Select<Poco>("Name = {0}", name);
var results = dbCmd.Where<Poco>("Name", name);
var results = dbCmd.Where<Poco>(new { Name = name });
var results = dbCmd.Select<Poco>("Select * from Poco Where Name = {0}", name);
var results = dbCmd.Query<Poco>("Select * from Poco Where Name = @name", new { name });
For building of queries the latest version uses a SqlBuilder class
which @samsaffron talks about here:
http://samsaffron.com/archive/2011/09/05/Digging+ourselves+out+of+the+mess+Linq-2-SQL+created
您可以 return 其他代码用来构建查询的构建器 class,然后在新的 dbCmd 查询中使用构建器输出,示例:
var count = dbCmd.QuerySingle<Poco>(count.RawSql, count.Parameters);
var rows = dbCmd.Query<Poco>(selector.RawSql, selector.Parameters);
Micro ORM 并不适合所有人,如果您有使用 IQueryable 的现有代码,最好保持原样。
OrmLite 使用自己的类型 API 进行查询,使用 simple lambda expressions 进行简单查询:
var results = db.Select<Poco>(x => x.Id == 1);
或类型化的 SqlExpression<T>
,它提供了 Typed API modeled closely over SQL,它还使用类似 LINQ 的 lambda 表达式来提供类型化的、丰富的 API,用于查询 RDBMS,例如:
var q = db.From<Track>()
.Where(x => customYears.Contains(x.Year))
.And(x => x.Name.Contains("A"))
.GroupBy(x => x.Year)
.OrderByDescending("Total")
.ThenBy(x => x.Year)
.Take(2);
var results = db.Select(q);
OrmLite 没有实现 IQueryable<T>
,如果您需要 SQL IQueryable<T>
实现,您需要使用像 EF 一样实现它的 ORM。
在任何其他 ORM 中获得 IQueryable<T>
的唯一方法是 return 它从 .NET List<T>
转换为 OrmLite return,例如:
List<Poco> results = db.Select<Poco>();
IQueryable<Poco> queryable = results.AsQueryable();
我正在使用最新的 ServiceStack OrmLite(当前为 v4.5.6)和 C#
我需要 return asQueryable 来自一个方法,例如;
using (IDbConnection databaseConnection = _databaseFactory.Open())
{
SqlExpression<T> sqlExpression = databaseConnection.From<T>();
IQueryable<T> asQueryable = databaseConnection.LoadSelect(sqlExpression, include)
.AsQueryable();
return asQueryable;
}
但是如您所见,加载Select 已经转到 sql 服务器,例如;
Select 来自 Table
所以我只需要 IQueryable 而无需转到 sql 服务器。我是用 Entity Framework 做的,这是代码;
public IQueryable<T> GetAll(Expression<Func<T, bool>> predicate)
{
return _dbSet.Where(predicate);
}
是的,我正在编写一种通用存储库包装器,我知道存储库模式不应该 return IQueryable,因为有人使用此方法可能会导致性能错误等。这不在我的主题范围内,对吧现在。
我如何 return IQueryable with OrmLite?
I saw a post like this; here
首先,OrmLite 中没有 IQueryable 或 Linq,它几乎只使用 SQL 或过滤器。 "Each" 中的方法 return 返回延迟计算的列表。
Generally you just query by passing in a "where sql", "anon types" or full sql, eg:
var results = dbCmd.Select<Poco>("Name = {0}", name);
var results = dbCmd.Where<Poco>("Name", name);
var results = dbCmd.Where<Poco>(new { Name = name });
var results = dbCmd.Select<Poco>("Select * from Poco Where Name = {0}", name);
var results = dbCmd.Query<Poco>("Select * from Poco Where Name = @name", new { name });
For building of queries the latest version uses a SqlBuilder class which @samsaffron talks about here: http://samsaffron.com/archive/2011/09/05/Digging+ourselves+out+of+the+mess+Linq-2-SQL+created
您可以 return 其他代码用来构建查询的构建器 class,然后在新的 dbCmd 查询中使用构建器输出,示例:
var count = dbCmd.QuerySingle<Poco>(count.RawSql, count.Parameters);
var rows = dbCmd.Query<Poco>(selector.RawSql, selector.Parameters);
Micro ORM 并不适合所有人,如果您有使用 IQueryable 的现有代码,最好保持原样。
OrmLite 使用自己的类型 API 进行查询,使用 simple lambda expressions 进行简单查询:
var results = db.Select<Poco>(x => x.Id == 1);
或类型化的 SqlExpression<T>
,它提供了 Typed API modeled closely over SQL,它还使用类似 LINQ 的 lambda 表达式来提供类型化的、丰富的 API,用于查询 RDBMS,例如:
var q = db.From<Track>()
.Where(x => customYears.Contains(x.Year))
.And(x => x.Name.Contains("A"))
.GroupBy(x => x.Year)
.OrderByDescending("Total")
.ThenBy(x => x.Year)
.Take(2);
var results = db.Select(q);
OrmLite 没有实现 IQueryable<T>
,如果您需要 SQL IQueryable<T>
实现,您需要使用像 EF 一样实现它的 ORM。
在任何其他 ORM 中获得 IQueryable<T>
的唯一方法是 return 它从 .NET List<T>
转换为 OrmLite return,例如:
List<Poco> results = db.Select<Poco>();
IQueryable<Poco> queryable = results.AsQueryable();