簡體   English   中英

EFCore 3:如何在服務器端比較字符串列

[英]EFCore 3: How to compare string columns on server side

我想有效地從此查詢中獲取結果。

// 獲取所有名字以 F 或更高字母開頭的人

Select * 來自 MyTable where PersonName >'F'

當我使用 Entity Framework Core 3.0 運行此代碼時,

                 context.MyTable 
                 .Where(t=>  String.Compare(t.PersonName ,"F")>0);

我有錯誤,

無法翻譯查詢。 以可翻譯的形式重寫查詢,或通過插入對 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的調用顯式切換到客戶端評估

我目前的工作是使用 FromSQL 方法並編寫我自己的 sql。 有沒有什么方法可以使用 LINQ 語法來實現相同的目標?

來自微軟的文檔Where

此方法表示的查詢在 object 通過直接調用其 GetEnumerator 方法枚舉之前不會執行

您應該在 Where for 強制立即查詢評估之后調用方法 ToList() 或 ToListAsync()

在您的代碼中

context.MyTable
             .TakeWhile(t => t.PersonName.First() > 'F')
             .ToList(); 

最佳解決方案

獲取所有姓名以 F 或更高字母開頭的人

    context.MyTable
             .OrderBy(t => t.PersonName)
             .SkipWhile(t => t.PersonName.First() < 'F')
             .ToList();

注意大小寫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM