在 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&lt;T&gt; 是否返回 IEnumerable&lt;T&gt;IQueryable&lt;T&gt; @canton7 IEnumerable&lt;T&gt; u =&gt; ageOption switch "Equals" =&gt; e.Age == age, "More Than" =&gt; u.Age &gt; age, ..... @canton7 编译器抛出 CS0832 错误 session.Query&lt;User&gt;() 的实际 C# 数据类型是什么?您的错误表明它不是 IEnumerable&lt;T&gt; 【参考方案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# 中将字符串转换为比较操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#中将字符串转换为整数

在c#中将字符串转换为long时的问题

如何在 C# 中将字符串转换为 DateTime?

在 C# 中将字符串转换为浮点数

如何在c#中将ArrayList转换为字符串数组(字符串[])

如何在c#中将字符串转换为日期[重复]