【发布时间】:2020-01-31 17:26:45
【问题描述】:
我有以下枚举:
public enum WorkType
{
Type1,
Type2,
Type3,
Type4,
Type5,
Type6
}
还有一个班级
public class Work {
public WorkType Type {get; set;}
....
}
还有一个扩展方法:
public static partial class WorkTypeExtensions
{
public static bool IsHighValueWork(this WorkType value)
{
switch (value)
{
case WorkType.Type1:
case WorkType.Type2:
return true;
default:
return false;
}
}
}
和 SQL Linq 查询
public List<Work> GetHighValueWork()
{
var query = Context.Work.Where( w => w.IsHighValueWork());
return query.ToList();
}
这是我的问题的简化版本。这个查询曾经可以工作,但在代码从 net core 2.1 转换到 3.1 后它就不再工作了。错误消息是 无法翻译查询。要么以可翻译的形式重写查询,要么通过插入对 AsEnumerable()、AsAsyncEnumerable() 的调用显式切换到客户端评估。我不想把它改成
public List<Work> GetHighValueWork()
{
var query = Context.Work.Where( w => w.Type == WorkType.Type1 || w.Type == WorkType.Type2);
return query.ToList();
}
因为实际功能非常复杂。我搜索似乎可以使用LINQ Expression Func,但我还没有想到。做这个的最好方式是什么?
【问题讨论】:
标签: c# .net-core linq-to-sql linq-to-entities