代码之家  ›  专栏  ›  技术社区  ›  BC.

在for循环中vexing linq to sql谓词构建

  •  0
  • BC.  · 技术社区  · 15 年前

    我正在使用一个循环构建一个LINQ查询,该循环使用数组附加谓词:

    foreach (string tag in tags)
    {
        result = result.Where(p => (p.TagsDelimited).Contains("," + tag + ","));
    }
    

    这将创建所有必需的子句,但每个子句只比较标记数组中的最后一个元素,从而生成SQL

    (((',' + [t0].[TagsDelimited]) + ',') LIKE '%,taglast,%') AND (((',' + [t0].[TagsDelimited]) + ',') LIKE '%,taglast,%')
    

    而不是每个标记一个子句。

    我可以通过添加

    string temp = tag;
    

    在for循环中使用temp而不是tag。

    问题是:这怎么可能!?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Community Dan Abramov    7 年前

    lambda捕获变量,而不是值。

    为了得到更多的解释,你可能想看看我的答案 this question