【问题标题】:LINQ using Contains with entityLINQ 使用包含实体
【发布时间】:2017-02-01 16:43:09
【问题描述】:

我正在使用 ASP.NET MVC 5 创建一个计费应用程序,现在我有一个东西函数,它接收一个具有不同变量的过滤器对象,我在搜索时遇到了包含问题,我做错了什么

    public static List<Quote> getCustomerQuotes(QuoteFilter filter)
    {
        using (var db = new AppDBContext())
        {
            var q = db.Quotes.Where(u => u.entryDate > 0); ;

            if (filter.type != null)
            {
                q = q.Where(u => u.quoteType == filter.type);
            }

            if (filter.only_permitable != null)
            {
                q = q.Where(u => !Values.NON_PERMITABLE_QUOTES.Contains(u.quoteType));
            }

            if (filter.quote_status != null)
                q = q.Where(u => u.quote_status == (int)filter.quote_status);

            if (filter.quotenumber != null)
            {
                q = q.Where(u => u.quote_number.Contains(filter.quotenumber));
            }

            if (filter.permitnumber != null)
                q = q.Where(u => u.permit_number.Contains(filter.permitnumber));

            if (filter.permit_status != null)
                q = q.Where(u => u.permit_status == (int)filter.permit_status);

            if (filter.quoteId != null)
                q = q.Where(u => u.Id == (int)filter.quoteId);

            if (filter.customer_id != null)
                q = q.Where(u => u.customer_id == (int)filter.customer_id);


            q = q.OrderByDescending(u => u.Id);
            FileLogger.Log("getCustomerQuotes", q.ToString());
            return q.ToList();
        }
    }

当我调用函数并传递引号时,包含不搜索,它不返回任何内容

【问题讨论】:

  • 我没有发现任何问题。此外,permitnumber 过滤器也类似,是否有效?

标签: c# asp.net entity-framework linq


【解决方案1】:

在应用 OrderByDescending 之前,您必须评估您的表达式。

q = q.Where(u => u.quote_number.Contains(filter.quotenumber)).ToList();

这也应该发生在其他地方。

【讨论】:

    【解决方案2】:

    报价单是字母数字吗?如果是,因为Contains 区分大小写,您可以通过首先将源和目标转换为相同大小写来尝试比较吗?喜欢

    q = q.Where(u =&gt; u.quote_number.ToLower().Contains(filter.quotenumber.ToLower()));

    干杯

    【讨论】:

      【解决方案3】:

      好的,我在找到解决方案后回答我自己的问题,或者我可以称之为 hack

      public static List<Quote> getCustomerQuotes(QuoteFilter filter)
          {
              using (var db = new AppDBContext())
              {
                  var q = db.Quotes.Where(u => 
      
                  (filter.type != null ? u.quoteType == filter.type : u.quoteType > 0) &&
      
                  (filter.only_permitable != null ? !Values.NON_PERMITABLE_QUOTES.Contains(u.quoteType) : u.permitType > 0) &&
      
                  (filter.quote_status != null ? u.quote_status == filter.quote_status : u.quote_status > -100) && 
      
                  (!string.IsNullOrEmpty(filter.quotenumber) ? u.quote_number.Contains(filter.quotenumber) || u.groupName.Contains(filter.quotenumber) : u.quoteType > 0) &&
      
                  (!string.IsNullOrEmpty(filter.permitnumber) ? u.permit_number.Contains(filter.permitnumber) || u.groupName.Contains(filter.permitnumber) : u.quoteType > 0) &&
      
                  (filter.permit_status != null ? u.permit_status == filter.permit_status : u.quoteType > 0) &&
      
                  (filter.quoteId != null ? u.Id == filter.quoteId : u.Id > 0) &&
      
                  (filter.customer_id != null ? u.customer_id == filter.customer_id : u.customer_id > -1)
      
                  ).OrderByDescending(u => u.Id);
      
      
                  //FileLogger.Log("getCustomerQuotes", q.ToString());
                  return q.ToList();
              }
          }
      

      我不知道为什么它第一次不起作用,但现在它起作用了。

      【讨论】:

        猜你喜欢
        • 2011-11-02
        • 1970-01-01
        • 2017-08-31
        • 1970-01-01
        • 2013-07-09
        • 2014-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多