2016-09-20 1 views
-1

я получаю сумму ProposalNumber используя ниже LINQ запросLINQ запрос для установки значения в коллекции

(from item in context.Target.Transaction 
where item.Month >= detailsDaily.Month && item.Month <= parameter.Month 
select item.ProposalNumber).Sum(); 

Теперь я хочу, чтобы установить значение ProposalNumber 0, между ними выше месяца, как я использовал для выбора. Укажите, какой должен быть запрос LINQ для этого?

+3

LINQ ** NOT ** для обновления данных. Если у вас есть набор результатов, которые вы хотите обновить, вы должны пропустить их и обновить свойство, которое вы хотите изменить ... конечно, вам нужно убедиться, что у вас есть ссылка на оригинал, а не на копию объект, который вы пытаетесь изменить – musefan

+0

@musefan, я спрашивал что-то, о чем говорится ниже. Является ниже запрос не LINQ? – user2318170

+0

Ну, бит, где вы * запрашиваете * данные ... но 'ForEach' не является частью LINQ. Это всего лишь метод для 'List ' – musefan

ответ

0

Если у вас есть список данных, как показано ниже:

var data = context.Target.Transaction 
    .Where(m => m.Month >= detailsDaily.Month 
     && m.Month <= parameter.Month) 
    .ToList(); 

Тогда вы можете найти Sum как:

var sum = data.Sum(m => m.ProposalNumber); 

И вы можете установить ProposalNumber 0, как:

data.ForEach(m => m.ProposalNumber = 0); 

Примечание: Если вы используете Entity Framework (как я полагаю, вы это делаете) это может быть дорогостоящей операцией для загрузки всех данных, если у вас слишком много строк. Если у вас нет большого количества данных, и вы выбираете этот способ для обновления своих данных, вам необходимо позвонить context.SaveChanges(), чтобы изменения произошли после установки значений. Вы также должны убедиться, что для параметра context.Configurations.AutoDetectChangesEnabled установлено значение true. Я рекомендую использовать Raw SQL queries в таких сценариях, а не эту опцию.

Смежные вопросы