@ Ответ Девина, вероятно, является самым чистым и делает важный вывод о задержке выполнения linq и о том, что 2 шага не означают два запроса. При этом , если вы хотите сделать это в одном запросе, вы можете написать первый запрос, включив в него дополнительное условие, например:
var lsFooterRow = from i in _context.Inventory
where i.ClaimId == claimID
&& i.Taxable == false
&& (i.ReplacementCost > 0 || reportType != "R")
group i by new { i.ClaimId }
into grp
select new
{
SumOfReplValue = grp.Sum(i => i.Price),
SumOfACV = grp.Sum(i => i.ACV),
SumOfReplCost = grp.Sum(i => i.ReplacementCost)
};
РЕДАКТИРОВАТЬ: Хм, единственное, что я могу придумать, это может привести к сбою, и работа @ Devin - это если вы меняете значение reportType между этим объявлением и тем, где когда-либо происходит фактическое перечисление lsFooterRow.Если это происходит, вы всегда можете просто .ToList () немедленно.Или, не так много ресурсов, скопируйте reportType во временную переменную, которая никогда не изменялась, и вместо этого ссылайтесь на нее в своем запросе.
string _reportType = reportType //only set here, nowhere else
var lsFooterRow = from i in _context.Inventory
where i.ClaimId == claimID
&& i.Taxable == false
&& (i.ReplacementCost > 0 || _reportType != "R")
group i by new { i.ClaimId }
into grp
select new
{
SumOfReplValue = grp.Sum(i => i.Price),
SumOfACV = grp.Sum(i => i.ACV),
SumOfReplCost = grp.Sum(i => i.ReplacementCost)
};
Но теперь он уже не такой чистый и перехватывает переменную _reportType без необходимости внутризакрытие