繁体   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