0

これは私のデータベーステーブルのデータです:

ここに画像の説明を入力

それが私のビジネスオブジェクトです:

public class Unit
    {
        public Unit()
        {
            MemberIdList = new List<String>();
        }

        public String UnitType { get; set; }
        public String UnitZoom { get; set; }
        public String MemberZoom { get; set; }

        public List<String> MemberIdList { get; set; }
    }

データベースからのデータ全体がフェッチされ、DataTable に入れられます。

次に、Linq 変換を行います...

このデータを保持する 3 つの Unit オブジェクトを含む List を返した後:

ここに画像の説明を入力

どのようにして 3 つのビジネス オブジェクトにデータを取得したかを推測してください...それが私が知りたい方法です。ヒントは、3 つのプロパティの Distinct と IEqualityComparer かもしれません...単なる仮定...

アップデート

質問が更新されました:

コード内のコメントを読んでください:)

var groupedCollection = table.AsEnumerable()
                                    .GroupBy(row => new
                                    {
                                        UType = row.Field<string>("UnitType"),
                                        UZoom = row.Field<string>("UnitZoom"),
                                        MZoom = row.Field<string>("MemberZoom"),
                                        MOrder = row.Field<int>("MemberOrder"), 

// MemberOrder をグループ キーに含めたくありませんが、後でこのプロパティを使用して並べ替えます... });

            var unitCollection = groupedCollection
                                .Select(g => new Unit 
                                {
                                    UnitType = g.Key.UType,
                                    UnitZoom = g.Key.UZoom,
                                    MemberZoom = g.Key.MZoom,                                   
                                    MemberIdList = g.Select(r => r.Field<string>("MemberId")).OrderBy(b => g.Key.MOrder).ToList(),
                                });

            List<Unit> units = unitCollection.ToList(); 
4

3 に答える 3

1

これは私がそれをする方法です:

var values = TblMembers.ToList();

var lst = 
    (from m in values
    group m by new { m.UnitType, m.UnitZoom, m.MemberZoom } into g
    select new
    {
        g.Key.UnitType,
        g.Key.UnitZoom,
        g.Key.MemberZoom,
        MemberIdList = g.Select (x => x.MemberID).ToList()
    }).ToList();
于 2011-06-08T20:56:55.047 に答える
0
var result =
        from n in data
        group n by new { n.UnitType, n.UnitZoom, n.MemberZoom } into g
        select new Unit 
        { 
          UnitType = g.Key.UnitType, 
          UnitZoom = g.Key.UnitZoom, 
          MemberZoom = g.Key.MemberZoom , 
          MemberIdList = g.Select ( r => r.MemberId).ToList() 
        };
于 2011-06-08T20:57:37.017 に答える
0

このようなもの ?

DataTable dt = ...

var list = 
dt.AsEnumerable()
.GroupBy(r => new
{
    UType = r.Field<string>("UnitType"),
    UZoom = r.Field<string>("UnitZoom"),
    MZoom = r.Field<string>("MemberZoom")
})
.Select(g => new Unit 
{ 
    UnitType = g.Key.UType, 
    UnitZoom = g.Key.UZoom, 
    MemberZoom = g.Key.MZoom ,
    MemberIdList = g.Select(r => r.Field<string>("MemberId")).Distinct().ToList()
})
.ToList();

編集:
への呼び出し.Distinct()は厳密には必要ありません。MemberId を使用できる場合は重複を回避しますが、実際には OP のニーズによって異なります。

EDIT2:(
最後の質問の更新によると)

あなたは解決策に近づいています:

私のコードのこの行を変更するだけです:

MemberIdList = g.Select(r => r.Field<string>("MemberId")).ToList()

に:

MemberIdList = g.Select(r => r.Field<string>("MemberId")).OrderBy(r => r.Field<int>("MOrder")).ToList()
于 2011-06-08T20:59:45.420 に答える