Linq:在进行投影时设置属性

2023-12-25

我正在做一个简单的 GroupBy 获取第一个元素,但我想修改每个结果的一个属性。

class M
{
 public string Name {get; set;}
 public int NOfPeopleWithTheSameName {get; set;}
 public string P1 {get; set;}
 public string P2 {get; set;}
 public string P3 {get; set;}
 public string P4 {get; set;}
 public string P5 {get; set;}
}  


List<M> myList = GetMyList();


var l2 = myList
   .GroupBy(m => m.Name)
   .Select(group => new M { Name = group.Key, NOfPeopleWithTheSameName = group.Count() });

这很简单,但是如果类有很多属性(因为每个属性值都应该复制到新的属性值),那么这种方法不是最好的吗?我应该一一复制。

我想简单地获取该元素并更改属性 NOfPeopleWithTheSameName


您不需要创建一个新的M,您可以返回现有的,例如:

var l2 = myList
   .GroupBy(m => m.Name)
   .Select(group => 
   {
        var m = group.First();
        m.NOfPeopleWithTheSameName = group.Count();
        return m;
   });

但是,如果您打算为此向模型添加一个属性,我建议您使用一个不同的类来包装初始模型和计数 - 不要污染您的模型。例如,您可以有一个像这样的通用包装类:

public class ModelCount<T>
{
    public T Model { get; set; }
    public int Count { get; set; }
}

现在这样分组:

var l2 = myList
   .GroupBy(m => m.Name)
   .Select(group => new ModelCount<M> 
   {
        Model = group.First(),
        Count = group.Count()
   });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linq:在进行投影时设置属性 的相关文章

随机推荐