是否可以通过数据库中的sql函数对Entity Framework进行排序? 我的意思是:
var xx = DbContext.Set<Article>()
.Where(x=>x.Name.Contains("X")).OrderBy("[dbo].[MySQLFunction]");
答案 0 :(得分:3)
var xx = DbContext.Set<Article>()
.Where(x=>x.Name.Contains("X"))
.Select(x=> new
{
Article = x,
orderItem = SqlFunction.//Any function you want to use.
// Or may you want to use DbFunctions
})
.OrderBy(x=>x.orderItem);
以下是有关DbFunctions和SqlFunctions
的更多信息<强> 更新 强>
顺便说一下,如果你的意思是使用你的自定义SQLFunction,那么我建议你在表中创建一个计算列,并使这个列使用这个SQLFunction,然后你就可以使用OrderBy或者对这个字段进行过滤使用正常的Linq查询
答案 1 :(得分:1)
我找到的唯一选择 - 就像糟糕的解决方法一样,我想这仅限于简单的查询。
var objectContext = ((IObjectContextAdapter)DbContext).ObjectContext;
var query = (System.Data.Objects.ObjectQuery)objectContext.CreateObjectSet<User>().Where(u => u.Id != Guid.Empty);
var initialQueryString = query.ToTraceString();
var resultQueryString = initialQueryString + " order by [dbo].[MySQLFunction]";
//careful here, if you use MS SQL you need to use SqlParameter instead of NpgsqlParameter
var paramValues = new List<NpgsqlParameter>();
foreach (var param in query.Parameters)
{
paramValues.Add(new NpgsqlParameter(param.Name, param.Value));
}
var result = objectContext.ExecuteStoreQuery<User>(resultQueryString, paramValues.Cast<object>().ToArray()).ToList();