2013-04-11 4 views
1

Я встретил странную ситуацию. Когда я пытался искать элементы с лямбда,LinQ to Entities: Лямбда, где

searchGuid = new Guid(condition[0]); 
searchItem = searchItem.Where(x => x.SiteId == searchGuid); 
searchGuid = new Guid(condition[1]); 
searchItem = searchItem.Where(x => x.FunctionTypeId == searchGuid); 

Он ничего не возвращает. Но когда я изменяю

searchGuid = new Guid(condition[0]); 
searchGuid2 = new Guid(condition[1]); 
searchItem = searchItem.Where(x => x.SiteId == searchGuid && 
            x.FunctionTypeId == searchGuid2); 

возвращает правильный элемент, который я ожидал.

Btw, он работает с Linq до sql.

Спасибо.

+2

Это связано с отсроченным исполнением. В первом примере, когда вторая строка фактически выполняется после 4-й строки. Итак, 2 searchGuid одинаковы. – Vladimir

ответ

2

лямбда функция захвата переменной searchGuid, поэтому в то время, вы выполняете запрос, searchGuid является new Guid(condition[1]), следовательно, ваш запрос эквивалентен

searchItem.Where(x => x.SiteId == new Guid(condition[1])) 
      .Where(x => x.FunctionTypeId == new Guid(condition[1])) 

, который не то, что вы хотите.

Вы нашли решение самостоятельно: используйте вторую переменную (или просто введите ее).