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

时间:2009-04-02 15:22:54

标签: c# linq linq-to-sql

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

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

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

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

而不是每个标签的一个子句。

我可以通过添加

来解决这个问题
string temp = tag;
在for循环中使用temp而不是tag。

问题是:这怎么可能!?

1 个答案:

答案 0 :(得分:1)

lambda捕获变量,而不是值。

有关详细说明,您可能需要阅读我对this question

的回答