在 C# 中将字符串转换为比较操作
Posted
技术标签:
【中文标题】在 C# 中将字符串转换为比较操作【英文标题】:Translate strings into comparison operations in C# 【发布时间】:2021-09-06 01:18:40 【问题描述】:我的 asp.net 应用中有 html 选择表单:
<select class="form-control" name="ageOption" asp-for="AgeOption" value="Equals">
<option>Equals</option>
<option>More Than</option>
<option>Less Than</option>
</select>
将来,我想创建一个查询,将这些值转换为比较操作
public async Task<IActionResult> Find(int age, string ageOption)
var users = new List<User>();
await Task.Run(() => users = session.Query<User>()
.Where(u => u.Age **ageOption** age);
【问题讨论】:
session.Query<T>
是否返回 IEnumerable<T>
或 IQueryable<T>
?
@canton7 IEnumerable<T>
u => ageOption switch "Equals" => e.Age == age, "More Than" => u.Age > age, .....
@canton7 编译器抛出 CS0832 错误
session.Query<User>()
的实际 C# 数据类型是什么?您的错误表明它不是 IEnumerable<T>
。
【参考方案1】:
由于您正在处理数据库查询,因此您可以修改查询,然后再运行它:
public async Task<IActionResult> Find(int age, string ageOption)
// var users = new List<User>(); // don't do this - it creates an empty List that you immediately replace below
List<User> users;
var q = session.Query<User>();
switch (ageOption)
case "Equal":
q = q.Where(u => u.Age == age);
break;
case "More":
q = q.Where(u => u.Age > age);
break;
case "Less":
q = q.Where(u => u.Age < age);
break;
await Task.Run(() => users = q.ToList());
【讨论】:
以上是关于在 C# 中将字符串转换为比较操作的主要内容,如果未能解决你的问题,请参考以下文章