【问题标题】:Vexing linq to sql predicate building in a for loop在 for 循环中构建 linq to sql 谓词
【发布时间】:2009-04-02 23:26:30
【问题描述】:

我正在使用一个循环构建一个 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。

问题是:这怎么可能!?

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案1】:

    lambda 捕获变量,而不是值。

    更多解释,你可能想阅读我对this question的回答

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      相关资源
      最近更新 更多