0

匿名型を使用せずに、各メンバーがすべての既存の値と変更された Name プロパティを持つ Member 型である groupedMembers を返すにはどうすればよいですか?

.Select() メソッドを使用して、すべての元のメンバー値を匿名型にコピー/貼り付けたくありません...

var groupedMembers = from r in dataRows 
                    join m in members on r.Name equals m.Name
                    group r by r.Name into g
                    select new { Name = String.Format("{0} ({1})", g.Key, g.Count()) };



var dataRows = new List<GenericDataRow> { 
    new GenericDataRow { Name = "E1" },
    new GenericDataRow { Name = "E1" }, 
    new GenericDataRow { Name = "E1" }, 
    new GenericDataRow { Name = "E1" }, 
    new GenericDataRow { Name = "E2" },
    new GenericDataRow { Name = "E2" }, 
    new GenericDataRow { Name = "E2" } 
};          

var members = new List<OtlClientMember> { 
    new Member { Name = "E1" },
    new Member { Name = "E2" },
    new Member { Name = "E3" },
    new Member { Name = "E4" },                         
};

出力

E1 (4)
E2 (3)
4

1 に答える 1

0

が一意になる場合Nameは、と をオーバーライドするだけでなく、GenericDataRowを実装する必要があります。以下の例。IEquatable<GenericDataRow>GetHashCodeEquals(object)

    private class GenericDataRow : IEquatable<GenericDataRow>
    {
        public string Name { get; set; }

        public bool Equals(GenericDataRow other)
        {
            return Name.Equals(other.Name);
        }

        public override int GetHashCode()
        {
            return Name.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            return Equals(obj as GenericDataRow);
        }
    }

次のLinqを使用:

var groupedMembers = from r in dataRows 
                join m in members on r.Name equals m.Name
                group r by r into g
                select new { Name = String.Format("{0} ({1})", g.Key.Name, g.Count()) };
于 2013-03-27T13:48:39.190 に答える