C# 使用实体框架奇怪的行为在循环中构建查询

C# 使用实体框架奇怪的行为在循环中构建查询,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我在我的实体框架回购协议上使用了以下搜索方法: public IEnumerable<Person> GetPersonsWithFilter(string filter) { var items = filter.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var query = _personRepo.All(); // Return IQueryable&

我在我的实体框架回购协议上使用了以下搜索方法:

public IEnumerable<Person> GetPersonsWithFilter(string filter)
{
    var items = 
        filter.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    var query = _personRepo.All();  // Return IQueryable<Person>

    foreach (var item in items)
    {
        query = query.Where(i => i.SearchName.Contains(item.ToLower()));
    }

    query.TraceSql(i => Logger.Error(i));
    return query.Take(50);
}
但是,参数是相同的:@p_linq_0='landheer'和@p_linq_1='landheer'

现在,如果我将循环更改为:

foreach (var item in items)
{
    var tempItem = item;
    query = query.Where(i => i.SearchName.Contains(tempItem.ToLower()));
}
一切正常

我认为这与EF构建表达式树的方式有关,但看起来有点出乎意料。有人能解释一下吗


约翰

谢谢你,所以我没有找到你提到的问题。因此,这是一个完全重复的。

这是因为捕获的变量,请参见
foreach (var item in items)
{
    var tempItem = item;
    query = query.Where(i => i.SearchName.Contains(tempItem.ToLower()));
}