C#LINQ访问LINQ SELECT语句中的另一个属性(方法)
我有一个问题是,是否可以访问LINQ中的另一个属性,以便在LINQ中设置另一个属性的值:C#LINQ访问LINQ SELECT语句中的另一个属性(方法),c#,asp.net,asp.net-mvc,linq,linq-to-sql,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,
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集合,现在我想用前一行中分配的Transactions属性设置我的sales属性:
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语句中使用以前的属性值设置另一个属性?就我而言,这是交易收集
这是否可行,如果可行,如何实现
另外,我想知道这是否可行,因为如果我可以使用这个以前设置的属性值,那么我就可以避免在DB中对我的Transactions表执行两个不必要的查询了?您不能使用以前的值,因为您不想为每个项调用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);
您不能使用上一个值,因为您不想为每个项目调用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);
我应该在select语句中也这样做吗?不,只是删除销售成员并用方法替换它。啊,好的,但是我如何为数据库中的每个项目填充事务集合?这就是让我困惑的部分。。。因为我的ViewModel类中没有事务集合?另外,每个项目都有一套不同的交易记录。。。所以我想我这样做是必要的?如果您有疑问,可以使用Transactions.ToArray()和for循环。这样,所有数据都是本地数据,而不是每次都枚举;)Max good point thx,但是如果我不先将查询转换为list,然后像这样执行它,那么如何将这个表达式转换为SQL呢?因为我试过这样,它说这个表达式不能翻译?我应该在select语句中也这样做吗?不,只是删除销售成员并用方法替换它。啊,好的,但是我如何为数据库中的每个项目填充事务集合?这就是让我困惑的部分。。。因为我的ViewModel类中没有事务集合?另外,每个项目都有一套不同的交易记录。。。所以我想我这样做是必要的?如果您有疑问,可以使用Transactions.ToArray()和for循环。这样,所有数据都是本地数据,而不是每次都枚举;)Max good point thx,但是如果我不先将查询转换为list,然后像这样执行它,那么如何将这个表达式转换为SQL呢?因为我试过这样,它说这个表达式不能翻译?