我试图让这个排序算法0工作:IQueryable的带字母排序
https://www.dotnetperls.com/alphanumeric-sorting
我已在AlphanumComparatorFast
类中实现和我的代码看起来像这样:
return this.DbContext.IssuesAccessView.AsQueryable()
.Include(r => r.Issue)
.Include(r => r.Issue.IssueAttachments)
.Include(r => r.Issue.IssueParticipants)
.Where(x => x.UserId == userId)
.Select(y => y.Issue)
.OrderBy(p => p.IssueNumber, new AlphanumComparatorFast());
它编译良好,但Linq不知道在运行时使用它,因为它不能将AlphanumComparatorFast
转换成SQL,所以我得到这个错误
“此方法无法转换为商店表达式。”
这里的关键是我不想丢失接口IQueryable
。我需要返回查询延迟执行。
所以我的问题是,任何人都可以想办法做到这一点?我是否需要使用SQL函数(或一些这样的),或者可以使用IQueryable
来完成?
谢谢!
UPDATE
感谢CodeNotFound回答,我确实需要创建一个SQL函数来做到这一点。
我已经创建了一个函数,并试图从C#EF6 Code First(无edmx文件)调用它,问题是我无法找到一个如何做到这一点的好例子。我已经得到了最接近的是这样的:
[Function(Name = "dbo.fn_CreateAlphanumericSortValue", IsComposable = true)]
[return: Parameter(DbType = "VarChar(100)")]
public string ReverseCustName([Parameter(Name = "string", DbType =
"VarChar(100)")] string @string)
{
return ((string)(this.ExecuteMethodCall(this,
((MethodInfo)(MethodInfo.GetCurrentMethod())),
@string).ReturnValue));
}
这里的问题是,这是从LINQ to SQL和使用DataContext.ExecutMethodCall
功能,而不是在EF 6中使用的DBContext
对象,并似乎在DBContext
没有等效方法
如何做到这一点EF6任何帮助(代码第一,没有的.edmx文件),将不胜感激
我想的很多。我现在有一个SQL函数来完成排序,但是还没有找到一个很好的例子来说明如何使用EF 6 Code First从C#调用它。添加上述问题的更新。 –