【问题标题】:Comparing bool and string in c#c#中比较bool和string
【发布时间】:2021-02-05 11:15:05
【问题描述】:

我有一个搜索方法,我想搜索表中的布尔值。 IsFallBack 是布尔型,在表格中显示为 true 或 false。

 if (!string.IsNullOrEmpty(searchIsFallBack))
            {
                tableData = (IOrderedQueryable<TableData>)tableData.Where(m => m.IsFallBack.ToString() == searchIsFallBack);
            }

当我尝试搜索程序时抛出异常:System.InvalidOperationException: 'The LINQ expression could not be translate.

searchValue 是用户在搜索框中输入的值 如何比较布尔值和搜索值?

【问题讨论】:

  • searchIsFallBack 的可能值是多少?
  • 我认为问题在于您尝试将其转换为 IOrderedQueryable。首先,也许您应该将其转换为 Queryable?: tableData = (blabla)tableData.Where().ToQueryable()
  • @AthanasiosKataras 用户可以在搜索框中输入“true”或“false”。如果用户输入 false,则用户只想看到 false 行。

标签: c# asp.net-mvc asp.net-core datatables


【解决方案1】:

简单的解决方案:

  if (!string.IsNullOrEmpty(searchIsFallBack))
    {
        if(searchIsFallBack == "true")
        {
            tableData = (IOrderedQueryable<TableData>)tableData.Where(m => m.IsFallBack);
        }
        else
        {
            tableData = (IOrderedQueryable<TableData>)tableData.Where(m => !m.IsFallBack);
        }
    }

【讨论】:

    【解决方案2】:

    如果我没记错的话,问题是 EF 无法翻译 ToString()。一种解决方案是将字符串转换为 bool(这也会提高性能,因为您将搜索本机 DB 类型,而不是对每一行执行转换):

    if (!string.IsNullOrEmpty(searchIsFallBack))
    {
        tableData = (IOrderedQueryable<TableData>)tableData.Where(m => 
           m.IsFallBack == (searchIsFallBack == "true"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 2011-08-25
      • 2021-05-16
      • 1970-01-01
      • 2017-08-30
      相关资源
      最近更新 更多