C#LINQ访问LINQ SELECT语句中的另一个属性(方法)

时间:2017-06-03 19:08:24

标签: c# asp.net asp.net-mvc linq linq-to-sql

我有一个问题,它是否可以访问LINQ中的另一个属性,以便在LINQ中设置另一个属性的值:

  var v = ctx.myTableItems
          .Where(x => x.id== anotherid)
          .Select(e => new MyViewModel
          {
            Title = e.Title,
            CurrentPrice = e.CurrenctPrice.Value,

            ItemID =  e.ItemID.ToString(),
            Transactions= e.Transactions,
            Sales = 
            })
            .Where(x=>x.Sales>0);

所以检查一下这些人,当我设置我的交易属性时,我在前一行中设置了交易集合,现在我想设置我的销售属性,其中包含在前一行中分配的Transactions属性:

  Transactions= e.Transactions,
  Sales = e.Transactions.Sum(x=>x.Quantity) // Normaly I'd do it like this

但我想尝试这样的事情:

 Sales = Transactions.Sum(x=>x.Quantity) // is this doable ?

所以我的问题是,是否可以在select语句中使用以前的属性值设置另一个属性?在我的情况下它的交易集合?

这样做是否可行,如果是这样,怎么办?

P.S。我试图确定这是否可行,因为如果我可以使用此先前设置的属性的值,那么我会避免在DB中的Transactions表上执行2个不必要的查询?

1 个答案:

答案 0 :(得分:1)

您不能使用之前的值,因为您不想为每个项目调用e.Transactions.Sum()。

只需向MyViewModel添加方法

即可
public double GetSales()
{
 return Transactions.Sum(x=>x.Quantity);
}

//at the end of your code use:
.Where(x=>x.GetSales()>0);