c# - SQL to LINQ - 案例语句
问题描述
我第一次将 SQL 语句重写到 LINQ。我不太确定如何正确写出我的案例陈述。运行时不喜欢我写的方式(我以这个链接为例)
我的目标是按照案例陈述组织我的数据。请让我知道我可以修改什么来实现我的目标。
我的错误说:
InvalidOperationException: The LINQ expression 'DbSet<Table>
.Where(c => c.ID ==(Nullable<int>)10)
.OrderBy(c => c.column1)
.ThenBy(c => _sortOrder_0.TryGetValue(
key: c.column3,
value:_order_1)?_order_1:_defaultOrder_2)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), ToList(), or ToListAsync()
原始 SQL 查询:
SELECT column1, column2, column3 from table where ID = # order by column1,
Case column3 When 'X' Then 1 When 'Y' Then 2 When 'Z' Then 3 End
林克:
public async Task<IActionResult> Index()
{
var sortOrder = new Dictionary<string, int>
{
{"X", 1 },
{"Y", 2 },
{"Z", 3 },
};
var defaultOrder = sortOrder.Max(x => x.Value) + 1;
int order;
var dataTest = _context.TableModel
.Where(x =>
(x.ID == 10)
)
.Select(x => new TableModel
{
column1 = x.column1,
column2 = x.column2,
column3 = x.column3,
})
.OrderBy(x => x.column1)
.ThenBy(x => sortOrder.TryGetValue(x.column3, out order) ? order : defaultOrder)
.AsNoTracking()
.ToListAsync();
}
旁注:我使用 ID = 10 进行测试。感谢您的时间!
解决方案
ThenBy
尝试对子句中的所有情况使用三元运算符:
.ThenBy(x => x.column3 == "X"
? 1
: x.column3 == "Y"
? 2
: x.column3 == "Z"
? 3
: defaultOrder)
推荐阅读
- c++ - CMake 错误:无法确定目标的链接语言
- php - 包含带有 try 和 catch 函数的文件
- javascript - 如何将一个真或假的 const 列表分类为两个单独的数组,一个包含真对象,一个包含假对象?
- maven - 如何使用 SonarCloud 分析 Git 子模块?
- docker - 如何显示在 Docker 容器内运行的操作系统的 GUI?
- python - 如何修复 Python 中的 GridSearchCV 错误?
- html - Bootstrap 导航栏图标和切换按钮问题
- ssl - 我可以替换 client-ca-file 以使 kubernetes 上的所有用户无效吗?
- asp.net - 如何解决这个IIS慢的问题?
- javascript - process.env.API_URL 未定义