【问题标题】:Linq IN OperatorLinq IN 运算符
【发布时间】:2014-09-15 16:02:51
【问题描述】:

我已尝试搜索此内容,但找不到适合我情况的示例。

我有这种回头客的方法。如何使用代码字符串数组对其进行过滤?包含对我不起作用。

public static List<Customer> GetCustomers(string[] customerCodesArray)
{
    using (busDataContext g = new busDataContext())
    {
        return g.Customers.Where(
            x => x.customerCode.Contains(customerCodesArray)).ToList();
    }
}

【问题讨论】:

  • 请澄清“究竟是什么”不起作用...
  • “不起作用”是什么意思?你得到一个编译错误?如果是这样,错误是什么?或者你得到一个运行时错误?如果是这样,错误是什么?

标签: c# linq-to-sql


【解决方案1】:

试试下面的代码:

return g.Customers.Where(x => customerCodesArray.Contains(x.customerCode)).ToList(); 

【讨论】:

  • 虽然在技术上是正确的,但在使用 SQL 时,这并不是性能最好的解决方案。它需要扫描整个客户表,并且很可能在客户代码数组上应用每条记录。其复杂度变为 O(N*M)。使用 Linq join 语句会更实用,因此生成的 SQL 查询也可以使用 join。
  • @TonniTielens 这完全取决于数据库的索引。它不一定会生成扫描(如果确实如此,连接也不会更好)。根据我的经验,插入临时表并加入仅在 customerCodesArray 包含数千个项目时才能提供性能优势。
【解决方案2】:

你倒退了:

return g.Customers.Where(x => customerCodesArray.Contains(x.customerCode)).ToList();

【讨论】:

    【解决方案3】:

    我认为您需要反转 Contains 表达式,因为您想查看数组是否包含客户代码,而不是相反。

    试试这个:

    return g.Customers.Where(x => customerCodesArray.Contains(x.customerCode)).ToList();
    

    【讨论】:

      【解决方案4】:

      试试

      return g.Customers.Where(x=>customerCodesArray.Contains(x.CustomerCode)).ToList();
      

      【讨论】:

        【解决方案5】:

        我想这就是你想要的

            return g.Customers.Where(x => customerCodesArray.Contains(x.customerCode)).ToList();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-21
          • 1970-01-01
          相关资源
          最近更新 更多