根据参数更改查询值

Mar*_*ard -1 .net c# linq asp.net-mvc

我有一个问题:

doc.NonFinancialAssetSection.NonFinancialAssets
              .Where(m => m.Owner.Id == ownerId && m.InvestableAsset == true)
              .Sum(s => s.CurrentValue);
Run Code Online (Sandbox Code Playgroud)

我需要将s.CurrentValue的值更改为s.ProposedValue,但是不是再次复制和粘贴查询,有什么办法可以让这个值依赖于传递给控制器​​的参数?

JLR*_*she 5

是的,你可以这样做:

var query = doc.NonFinancialAssetSection.NonFinancialAssets
                .Where(m => m.Owner.Id == ownerId && m.InvestableAsset == true);

var sum = (condition) 
     ? query.Sum(s => s.CurrentValue) 
     : query.Sum(s => s.ProposedValue);
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

var sum = doc.NonFinancialAssetSection.NonFinancialAssets
             .Where(m => m.Owner.Id == ownerId && m.InvestableAsset == true)
             .Sum(s => (condition) ? s.CurrentValue : s.ProposedValue);
Run Code Online (Sandbox Code Playgroud)

或这个:

Func<NonFinancialAsset, double> sumProperty = (condition)
     ? s => s.CurrentValue
     : s => s.ProposedValue;

var sum = doc.NonFinancialAssetSection.NonFinancialAssets
             .Where(m => m.Owner.Id == ownerId && m.InvestableAsset == true)
             .Sum(sumProperty);
Run Code Online (Sandbox Code Playgroud)