如何在选择语句中计算

本文关键字:计算 语句 选择 | 更新日期: 2023-09-27 18:18:46

c# linq实体框架

想要避免foreach循环从我的下面的语法。它是能够计算foreach循环计算在选择语句?

var result = (from p in MasterDetail
              join q in Master on p.TaxID equals q.TaxID
              where p.EffectiveDate >= tempEffectiveDate && p.EffectiveDate <= tempEffectiveDate
              select new TransactionItem
              {
                  MasterDetailID = p.MasterDetailID,
                  CustomCode = p.CustomCode,
                  TaxID = p.TaxID,
                  TaxName = q.TaxName,
                  ItemID = p.ItemID,
                  EffectiveDate = p.EffectiveDate,
                  SlavAmount = (decimal)0.0,
                  SlavTaxAmount = (decimal)0,
                  Rate = p.Rate,
                  BarCode = p.BarCode,
                  IsPercentage = p.IsPercentage,
                  CurrencyID = p.CurrencyID,
                  MinAmount = p.MinAmount,
                  MaxAmount = p.MaxAmount,
              }).AsEnumerable();

decimal tempgivenAmount = givenAmount;
decimal temp = 0;
List<TransactionItem> oList = new List<MasterDetailList>();

foreach (MasterDetailList item in result)
{
    temp = tempgivenAmount - item.MaxAmount;
    if (temp >= 0)
    {
        temp = item.MaxAmount;
    }
    else
    {
        temp = tempgivenAmount;
    }
    if (item.IsPercentage == true)
    {
        item.SlavTaxAmount = (decimal)Math.Abs(temp) * (item.Rate / 100);
    }
    else
    {
        item.SlavTaxAmount = item.Rate;
    }
    item.SlavAmount = Math.Abs(temp);
    tempgivenAmount = tempgivenAmount - item.MaxAmount;
    oList.Add(item);
    if (tempgivenAmount <= 0)
    {
        break;
    }
}

我如何使用LINQ编写上面的foreach ?

如何在选择语句中计算

条件表达式在LINQ查询中并不难使用;只要使用? :条件运算符。您甚至可以使用let关键字引入临时变量。

但我认为你的余额累加器(tempgivenAmount)将是一个症结。每次循环迭代,你都将这个值递减一些计算量,然后这个新值成为下一次迭代计算的输入。LINQ不是为使用这样的可变变量而构建的;它是为纯功能操作而设计的,没有副作用。(如果你使用LINQ to Objects,你可以摆脱一些可变性,但这些结构不会映射到SQL,所以你不能在实体框架中使用它们。)

考虑到你的计算方式,我认为你需要在代码中进行循环。