2016-09-20 74 views
-1

我使用下面的LINQ查询LINQ查询中收集

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

得到的ProposalNumber之和的值设置现在我想将价值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(); 

后,可以看到点心,如:

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

,你可以设置ProposalNumber为0,如:

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

注意:如果您使用的是实体框架(正如我所想的那样) )如果行数太多,则加载所有数据的操作可能很昂贵。如果您没有大量数据,并且您选择以这种方式更新数据,则必须在设置值后调用context.SaveChanges()进行更改。您还应该确保context.Configurations.AutoDetectChangesEnabled设置为true。我建议在这种情况下使用Raw SQL queries而不是此选项。