我試圖讓這個排序算法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#調用它。添加上述問題的更新。 –