-1

以下のようなテーブルがあります。

Data {
    id varchar(50),
    pId uniqueidentifier ,
    fId uniqueidentifier ,
    xid uniqueidentifier,
    flag smallint 
}

pId と fId は 1:n の関係であり、fId から xId への関係も 1:n の関係であるため、テーブルには多くの重複行が含まれています。

このテーブルにクエリを実行し、次のように obj を入力します。

class P
{
    Guid id;
    List<F> fList; 
}

class F
{
    Guid id;
    List<X> xList; 
}


class X
{
    Guid id;
    byte flag; 
}

私はLinqを学んでいます。Linq を使用してテーブルからクラス P を設定するソリューションは役に立ちます。

ありがとう!

4

1 に答える 1

2

このクエリは返されます(へのIEnumerable<P>変換についてはわかりませんが、他のものは機能するはずです)smallintboolean

var query = from p in context.Data
            group p by p.pId into gp
            select new P()
            {
                id = gp.Key,
                fList = (from f in gp
                         group f by f.fId into gf
                         select new F()
                         {
                             id = gf.Key,
                             xList = gf.Select(x => new X() { id = x.xid, 
                                                              flag = x.flag })
                                       .ToList()
                         }).ToList()
            };

コメント:

gpある pId に対応するすべての行が含まれます。つまり、pId に関連するすべての fId が返されます。

gf一部の fId に関連する前の結果からのすべての行が含まれます (つまり、fId に関連するすべての xid)。

于 2012-11-20T16:42:10.797 に答える