당신이 코드에서이 쿼리를 작성하는 동안 : 그것은 실제로 데이터베이스에을 실행하는 것
from xx in db.vwCustomizationHeaders
where xx.ProductID == pID
select new custHeader()
{
headIndex = headIndex++
}
합니다. 그리고 데이터베이스는 코드의 값을 수정할 수 없습니다. 따라서 데이터베이스에서 해당 코드 로컬 값 (headIndex
)을 증가시킬 수 없습니다. (또한 @Kirk Woll이 지적했듯이 select와 같은 값을 수정하는 것은 매우 나쁜 습관입니다. select는 상태를 변경하거나 부작용을 일으키지 않고 상태를 변경하거나 부작용을 일으키지 않고 select 또는 가져와야합니다.)
모두 ' 그 값을 업데이트하면 선택을 사용할 필요가 없습니다. 에서
lst = (from xx in db.vwCustomizationHeaders
where xx.ProductID == pID
select new custHeader()
{
SomeField = xx.SomeField,
AnotherField = xx.SomeOtherField
// etc.
});
: 주석 처리 된 부분은 당신은 또한,하지만 이런 일을 vwCustomizationHeader
의 목록을 작성하고 제안
headIndex += db.vwCustomizationHeaders.Count(ch => ch.ProductID == pID);
: 사용자가 직접 값으로 레코드의 수를 추가 할 수 있습니다 거기에 lst
개체를 사용하여 카운터를 수정할 수 있습니다.
headIndex += lst.Count();
쿼리는 서버 측에서 실행됩니다. 말할 것도없이 외부 변수를 수정할 수 있다는 것은 상상할 수 없습니다. 먼저 쿼리 ('.ToArray()', 등)를 실행 한 다음 그것을 반복해서 반복해야합니다. 게다가,'select' 절에서 상태를 수정하는 것은 실제로 좋지 않습니다. –
어떻게 내가 다음 선택에서 수정해야합니까? – NoviceToDotNet
'foreach' 루프 ('.ToArray'의 결과를 통해)는 훌륭하게 작동합니다. –