0

假设我们的表单上有一个带有可选复选框的描述字段。复选框表示进行查找时要搜索的字段。现在我有一个查找矩阵,它调用了他们独特版本的 where 子句。它有效,但我认为它闻起来有点。

这是摘录

    // Look for part numbers decide how many fields to search and use that one.
    // 0 0 X
    if (!PartOpt[0] && !PartOpt[1] && PartOpt[2])
    {
     query = query.Where(p => (p.PartNumAlt2.Contains(partSearchRec.inventory.PartNum)));
    }
    // 0 X 0
    if (!PartOpt[0] && PartOpt[1] && !PartOpt[2])
    { 
      query = query.Where(p => (p.PartNumAlt.Contains(partSearchRec.inventory.PartNum)));
    }
    // 0 X X
    if (!PartOpt[0] && PartOpt[1] && PartOpt[2])
    {
      query = query.Where(p => (p.PartNumAlt.Contains(partSearchRec.inventory.PartNum)
        || p.PartNumAlt2.Contains(partSearchRec.inventory.PartNum)));
    }
    // X 0 0
    if (PartOpt[0] && !PartOpt[1] && !PartOpt[2])
    {
      query = query.Where(p => (p.PartNum.Contains(partSearchRec.inventory.PartNum)));
    }
     . . .

这种情况持续了一段时间,似乎很容易出现编码错误。在每种情况下,我们都在任何选定的字段中寻找相同的信息。如果我在 SQL 中执行此操作,我可以根据需要简单地构建 WHERE 子句。

4

1 回答 1

0

我又一次躲避着回答。与其把这个问题扔掉,这就是我想出的。它有效率吗?

if (partSearchRec.optPartNum || partSearchRec.optAltPartNum1 || partSearchRec.optAltPartNum2)
{
  query = query.Where(p => (
       (partSearchRec.optPartNum && p.PartNum.Contains(partSearchRec.inventory.PartNum))
    || (partSearchRec.optAltPartNum1 && p.PartNumAlt.Contains(partSearchRec.inventory.PartNum))
    || (partSearchRec.optAltPartNum2 && p.PartNumAlt2.Contains(partSearchRec.inventory.PartNum))));
}

基本上,如果设置了任何复选框,我们将执行查询。只有在选中复选框时,才会处理查询的每一行。如果 AND 的左侧为假,则不会处理右侧。

这是一个德尔福的with声明会派上用场的时代。我还了解到不能在 LINQ 语句中使用数组。

于 2012-08-23T11:07:30.000 回答