Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ在列表中的类中添加两个字段?_C#_Linq_Linq To Entities_Linq To Objects - Fatal编程技术网

C# 如何使用LINQ在列表中的类中添加两个字段?

C# 如何使用LINQ在列表中的类中添加两个字段?,c#,linq,linq-to-entities,linq-to-objects,C#,Linq,Linq To Entities,Linq To Objects,我在这里查阅了一些答案,但找不到确切的答案。 因此,我决定发布以下问题: 我有a类的对象,我有一个列表 类具有以下定义: public decimal Discount { get; set; } public decimal Deposit { get; set; } public decimal Total { get; set; } 我在列表中有很多这样的课程 我计算了折扣和存款总额: var DepositTotal = myList.Sum(x => x

我在这里查阅了一些答案,但找不到确切的答案。 因此,我决定发布以下问题:

我有a类的对象,我有一个
列表

类具有以下定义:

    public decimal Discount { get; set; }
    public decimal Deposit { get; set; }
    public decimal Total { get; set; }
我在列表中有很多这样的课程

我计算了折扣和存款总额:

var DepositTotal = myList.Sum(x => x.Deposit);
var DiscountTotal = myList.Sum(x => x.Deposit);
现在,我需要计算每个类的总和(存款、折扣),并将结果分配到
Total
字段,这样我以后就可以得到每个类的
Total


我该怎么做呢?

您真的不应该尝试修改LINQ查询中的项,因为代码的读者不会期望它发生

不幸的是,即使使用Select,您也可以轻松做到这一点:

    list.Select(x => {x.Total = x.Discount + x.Deposit; return x;});
注意:更好的解决方案可能是使用计算属性
总计
,而不是字段:

 public decimal Total => Discount + Deposit;

您确实不应该尝试修改LINQ查询中的项,因为代码的读者不会期望它发生

不幸的是,即使使用Select,您也可以轻松做到这一点:

    list.Select(x => {x.Total = x.Discount + x.Deposit; return x;});
注意:更好的解决方案可能是使用计算属性
总计
,而不是字段:

 public decimal Total => Discount + Deposit;

您目前使用折扣和存款设置器的方式听起来是正确的,但是您也应该将您的设置器设置为Total private

您不能/不应该在查询中更改列表的A对象,但可以通过使用原始列表上的查询输出覆盖列表来更新列表。不清楚类A的构造函数,但如下所示:-

myList = myList.Select(a=>new A(Discount =a.Discount, Deposit=a.Deposit, Total=a.Discount+a.Deposit) ).ToList();

尽管如此,如果Total完全依赖于折扣和存款的值(如名称所示),那么将其完全内部化到类中(封装)会更好。

您目前使用折扣和存款的setter进行设置的方式听起来是正确的,但是您也应该将Total的setter设置为私有

您不能/不应该在查询中更改列表的A对象,但可以通过使用原始列表上的查询输出覆盖列表来更新列表。不清楚类A的构造函数,但如下所示:-

myList = myList.Select(a=>new A(Discount =a.Discount, Deposit=a.Deposit, Total=a.Discount+a.Deposit) ).ToList();

但是,如果Total完全依赖于折扣和存款的值,那么正如名称所示,将其完全内部化到类中(封装)更好。

您所说的“为每个类计算总和(存款、折扣)”是什么意思?你说的“类”是指实例吗?您的意思是,对于每个实例,都要设置
this.Total=this.Deposit+this.Discount
?在
存款
折扣
的设置器中执行此操作,或将
总额
重写为
公共双倍总额=>折扣+存款是的,这就是我现在正在做的。ThxI刚刚编辑了我的评论,提出了一些完全不同的建议。你想要像这样的
listA.ForEach(d=>d.Total=d.存款+d.折扣)吗?您所说的“计算每类课程的金额(存款、折扣)”是什么意思?你说的“类”是指实例吗?您的意思是,对于每个实例,都要设置
this.Total=this.Deposit+this.Discount
?在
存款
折扣
的设置器中执行此操作,或将
总额
重写为
公共双倍总额=>折扣+存款是的,这就是我现在正在做的。ThxI刚刚编辑了我的评论,提出了一些完全不同的建议。你想要像这样的
listA.ForEach(d=>d.Total=d.存款+d.折扣)吗?这确实是不幸的。@EdPlunkett在帖子中集成了更新的评论(也是我在看到更新之前做的:))这确实是不幸的。@EdPlunkett在帖子中集成了更新的评论(也是我在看到更新之前做的:))